在编写MSBuild脚本时,我需要定义一系列默认属性,但可以在运行脚本时进行覆盖。根据以下文章,您应该使用条件语句来设置属性的默认值:
然而,这个表现方式完全相同:
这可以简单地运行为
http://msdn.microsoft.com/en-us/library/ee240983.aspx
微软的建议:<PropertyGroup>
<MyProperty Condition="'$(MyProperty)' == '' ">Default Value</MyProperty>
</PropertyGroup>
然而,这个表现方式完全相同:
<PropertyGroup>
<MyProperty>Default Value Without Conditional</MyProperty>
</PropertyGroup>
所以,如果我有这个目标(Target)
并使用上述任何一种方式调用它,它的行为都是相同的:
<Target Name="DefaultsTest">
<Message Text="$(MyProperty)"></Message>
</Target>
调用:
msbuild build.xml /t:DefaultsTest /p:MyProperty="Overridden value"
如果您只是默认相同的属性,而这些属性可以从调用中覆盖,那么请解释使用 Condition
属性的好处。
更新:
这里有一个完整的简单配置文件来演示:defaults.xml
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="DefaultsTest" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyProperty Condition=" '$(MyProperty)' == '' ">MyProperty with Conditional</MyProperty>
<MyOtherProperty>MyOtherProperty without Conditional</MyOtherProperty>
</PropertyGroup>
<Target Name="DefaultsTest">
<Message Text="$(MyProperty)"></Message>
<Message Text="$(MyOtherProperty)"></Message>
</Target>
</Project>
这可以简单地运行为
msbuild defaults.xml
或者
msbuild defaults.xml /p:MyProperty="更改的值" /p:MyOtherProperty="同样更改"
msbuild build.xml /t:DefaultsTest
调用这两种情况,您将看到差异。 - stijn