我在MSBuild项目中有一个属性,它是一个以分号分隔的字符串值列表。如何测试列表是否具有特定值?
在下面的示例列表中,如果属性DeployToServer
成为$(DCC_Define)
,我希望仅执行目标'WebDeploy'
。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DCC_Define>WebDeploy;DEBUG</DCC_Define>
</PropertyGroup>
<Target Name="DeployToServer" Condition="$(DCC_Define) constains 'WebDeploy'">
<Message Text="Do something." />
</Target>
</Project>
我在@Condition属性中使用了一些伪逻辑来表明我的意思。我使用的是.NET框架版本2.0.50727.3655;和MSBuild版本3.4.30729.1。
我怎样才能做到这一点?我没有能力升级到MSBuild 4的奢侈品。
答案 0 :(得分:0)
好吧,既然你不能使用属性功能,那么你必须要有创意。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DCC_Define>WebDeploy;DEBUG;WebDeploy</DCC_Define>
</PropertyGroup>
<Target Name="DeployToServer">
<CreateItem Include="$(DCC_Define)">
<Output TaskParameter="Include" ItemName="DCC_Define" />
</CreateItem>
<!-- Not required since MSBuild doesn't execute targets twice -->
<!-- <CreateProperty Value="True" Condition="%(DCC_Define.Identity) == WebDeploy">
<Output TaskParameter="Value" PropertyName="WebDeploy" />
</CreateProperty> -->
<CallTarget Targets="_DeployToServer" Condition="%(DCC_Define.Identity) == WebDeploy" />
</Target>
<Target Name="_DeployToServer">
<Message Text="Do something." />
</Target>
</Project>