Rom*_*kov 3 msbuild msbuild-propertygroup
运行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>
Run Code Online (Sandbox Code Playgroud)
如果像这样运行:msbuild Script1.proj /p:GlobalProp1=VALUE1上面的脚本产生以下输出:
Script2, GlobalProp1=VALUE1
Script2, GlobalProp2=
Script1, GlobalProp1=VALUE1
Script1, GlobalProp2=
Run Code Online (Sandbox Code Playgroud)
我希望Script2.proj以某种方式设置GlobalProp2以产生以下输出:
Script2, GlobalProp1=VALUE1
Script2, GlobalProp2=VALUE2
Script1, GlobalProp1=VALUE1
Script1, GlobalProp2=VALUE2
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是的话,怎么样?
我已经看到了使用环境变量的建议,但似乎唯一有帮助的情况是在父脚本中设置变量,并且使用Exec任务调用子脚本(否则env.variable变更具有没有效果).
由于您使用的是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>
Run Code Online (Sandbox Code Playgroud)
必须明确传递属性,这是设计的.
如果您想要更紧密的集成,那么您应该只导入将创建1个逻辑脚本的文件,而不是使用MSBuild任务.
| 归档时间: |
|
| 查看次数: |
5185 次 |
| 最近记录: |