Так или иначе вам нужно будет наследовать значения свойств в каждом листе импортируемых свойств. Видите ли, если вы напишите <A>someValue</A>
, тогда, чем бы ни было A
, теперь оно будет установлено на someValue
. Вам нужно <A>someValue;$(A)</A>
, чтобы вычисленное значение состояло из "старого", объединенного с новым.
В этом случае вы не можете просто объединить переменные, хотя из-за выражения PATH =. Предположим, вы используете
<LocalDebuggerEnvironment>PATH=SOMEPATH;$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
<LocalDebuggerEnvironment>PATH=SOMEPATH2;$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
, тогда вы получите
PATH=SOMEPATH2;PATH=SOMEPATH
Так что вам нужен обходной путь. Одним из способов является использование отдельного значения для путей, которые вы хотите добавить:
B1:
<PropertyGroup Label="UserMacros">
<PathValue>SOMEPATH;$(PathValue)</PathValue>
<LocalDebuggerEnvironment>PATH=$(PathValue);%PATH%</LocalDebuggerEnvironment>
</PropertyGroup>
B2:
<PropertyGroup Label="UserMacros">
<PathValue>SOMEPATH2;$(PathValue)</PathValue>
<LocalDebuggerEnvironment>PATH=$(PathValue);%PATH%</LocalDebuggerEnvironment>
</PropertyGroup>
C:
<PropertyGroup Label="UserMacros">
<LocalDebuggerEnvironment>PATH=$(PathValue);%PATH%</LocalDebuggerEnvironment>
</PropertyGroup>
Недостатком является то, что вам нужны 2 переменные и необходимо повторять часть LocalDebuggerEnvironment
в каждом файле, иначе вы не сможете использовать их отдельно. Однако в остальном это довольно удобно и понятно. И если вы не хотите использовать B1 и B2 по отдельности, вам вообще не нужны LocalDebuggerEnvironment
. Затем, если вам нужно только значение от B1, вы добавите C и B1 к своему проекту.
Единственная альтернатива, которую я вижу в настоящее время, будет означать, что вам придется выполнить некоторый анализ значения, чтобы получить наследование работает без повторения PATH = part. Но это не совсем красиво и, возможно, в некоторых случаях может сломаться. В общем, я бы советовал против этого, просто слишком сложно. Вот один вариант; используя свойства функций , примите текущее значение LocalDebuggerEnvironment
, удалите часть PATH =, удалите часть% PATH%, затем удалите несколько последовательных точек с запятой (я думаю, это не обязательно). Как видите, C ничего не нужно, поскольку Bs уже позаботились о наследовании значения и поэтому могут использоваться автономно:
B1:
<PropertyGroup Label="UserMacros">
<LocalDebuggerEnvironment>PATH=SOMEPATH;$(LocalDebuggerEnvironment.Replace('PATH=', '').Replace('%PATH%', '').Replace(';;', ';'));%PATH%</LocalDebuggerEnvironment>
</PropertyGroup>
B2:
<PropertyGroup Label="UserMacros">
<LocalDebuggerEnvironment>PATH=SOMEPATH2;$(LocalDebuggerEnvironment.Replace('PATH=', '').Replace('%PATH%', '').Replace(';;', ';'));%PATH%</LocalDebuggerEnvironment>
</PropertyGroup>
C:
<PropertyGroup Label="UserMacros" />