MSBuild: как создать глобальное свойство? - PullRequest
3 голосов
/ 24 декабря 2009

При запуске MSBuild все, что передается в командной строке с помощью /p:MyProp=value, доступно из каждого скрипта MSBuild, вызванного (через задачу MSBuild) из основного скрипта. Как я могу определить свойство, которое одинаково доступно из каждого скрипта в задаче?

Например:

Script1.proj:
[...]
<Target Name="Test">
  <MSBuild Projects="Script2.proj"/>
  <Message Text="Script1, GlobalProp1=$(GlobalProp1)"/>
  <Message Text="Script1, GlobalProp2=$(GlobalProp2)"/>
</Target>

Script2.proj:
[...]
<Target Name="Test">
  <!-- ??? Set GlobalProp2 = VALUE2 ??? -->
  <Message Text="Script2, GlobalProp1=$(GlobalProp1)"/>
  <Message Text="Script2, GlobalProp2=$(GlobalProp2)"/>
</Target>

Если работать так: msbuild Script1.proj /p:GlobalProp1=VALUE1 вышеприведенные сценарии выдают следующий вывод:

Script2, GlobalProp1=VALUE1
Script2, GlobalProp2=
Script1, GlobalProp1=VALUE1
Script1, GlobalProp2=

Я бы хотел, чтобы Script2.proj каким-либо образом установил GlobalProp2 для получения следующего вывода:

Script2, GlobalProp1=VALUE1
Script2, GlobalProp2=VALUE2
Script1, GlobalProp1=VALUE1
Script1, GlobalProp2=VALUE2

Возможно ли это, и если да, то как?

Я видел предложения по использованию переменных среды, но, похоже, ситуация only , в которой это помогает, - это когда переменная устанавливается в сценарии parent и 1023 * child сценарий вызывается с помощью задачи Exec (в противном случае изменение env.variable не имеет никакого эффекта).

Ответы [ 2 ]

6 голосов
/ 25 декабря 2009

Поскольку вы используете задачу MSBuild , вам нужно передать требуемые свойства в вызов с помощью атрибута Properties, поэтому вы должны изменить свой пример на.

<Target Name="Test">  
    <MSBuild Projects="Script2.proj" 
        Properties="GlobalProp1=$(GlobalProp1);GlobalProp2=$(GlobalProp2)"
    />  
    <Message Text="Script1, GlobalProp1=$(GlobalProp1)"/>  
    <Message Text="Script1, GlobalProp2=$(GlobalProp2)"/>
</Target>

Свойства должны быть явно переданы, это по замыслу.

Если вы хотите более тесную интеграцию, тогда вместо использования задачи MSBuild вам нужно просто импортировать файл (ы), который создаст 1 логический скрипт.

5 голосов
/ 07 ноября 2012

Вы можете использовать rsp файл для определения глобальных свойств. Эти свойства видны дочерним проектам.

...