gpt4 book ai didi

MSBuild:如何创建全局属性?

转载 作者:行者123 更新时间:2023-12-01 08:20:09 25 4
gpt4 key购买 nike

运行 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

这可能吗,如果可以,怎么做?

我已经看到使用环境变量的建议,但似乎唯一有帮助的情况是在父脚本中设置变量,并且使用 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>

必须显式传递属性,这是设计使然。

如果您想要更紧密的集成,那么您应该只导入将创建 1 个逻辑脚本的文件,而不是使用 MSBuild 任务。

关于MSBuild:如何创建全局属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1959493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com