Gra*_*ers 5 msbuild visual-studio-2010 visual-c++ msbuild-4.0
我在VS2010中为我的VC++项目设置了自定义构建规则.在此规则中,我想允许用户在是否处理文件时添加复杂条件.
这也需要在目标执行时而不是在"项目"本身的"条件"中进行评估(由于只有'应用程序'项目可以处理它并且需要使用'应用'项目,而不是依赖项目).
我已经尝试向对象添加自定义字段,然后在执行时只删除组中的项目.例如
<ItemGroup>
<MyItemType Remove="@(MyItemType)" Condition="!(%(MyItemType.IncludeCondition))" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给了我错误:
错误MSB4113:指定条件"!(%(MyItemType.IncludeCondition))"评估为"!'testfilename1'=='testfilename2'或false"而不是布尔值.
('%(MyItemType.IncludeCondition)'中的原始条件表达式是'%(Filename)' == 'testfilename2' or $(TestBooleanFalse)
)
看起来好像MSBuild不会将项元数据的内容评估为布尔值(在大多数情况下这似乎是很好的做法,而不是这个).
无论如何我可以让MSbuild实际将元数据评估为布尔值,还是有其他方法可以用来获得相同的结果?
PS我已经简要了解了MSBuild 属性函数,但是看不到任何会在函数输入上运行MSBuild布尔评估代码的东西)
一个非常精简的MSBuild项目示例显示了这个问题,由Lanrokin提供:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<MyItemType Include="item1.ext1" />
<MyItemType Include="item1.ext2" />
</ItemGroup>
<Target Name="SpecifyConditions">
<ItemGroup>
<MyItemType>
<IncludeCondition>'%(Filename)%(Extension)' == 'item1.ext1'</IncludeCondition>
</MyItemType>
</ItemGroup>
</Target>
<Target Name="Build" DependsOnTargets="SpecifyConditions">
<Message Importance="high" Text="@(MyItemType)" Condition="%(MyItemType.IncludeCondition)" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
尝试内联声明条件而不是项目元数据:
<ItemGroup>
<MyItemType Remove="@(MyItemType)" Condition="('%(MyItemType.Filename)' == 'testfilename2')" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
Property Functions
或者在元数据条件中使用:
<Target Name="SpecifyConditions">
<ItemGroup>
<MyItemType>
<IncludeCondition>$([System.String]::Equals('%(Filename)%(Extension)', 'item1.ext1'))</IncludeCondition>
</MyItemType>
</ItemGroup>
</Target>
<Target Name="Build" DependsOnTargets="SpecifyConditions">
<Message Importance="high" Text="@(MyItemType)" Condition="%(MyItemType.IncludeCondition)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
465 次 |
最近记录: |