观察以下msbuild脚本片段:
<ItemGroup>
<R Include="-Microsoft.Design#CA1000" />
<R Include="-Microsoft.Design#CA1002" />
</ItemGroup>
我想将其转换为
/ruleid:-Microsoft.Design#CA1000 /ruleid:-Microsoft.Design#CA1002
现在,我想出的最好的是
@(R -> '/ruleid:%(Identity)')
,但这只会产生/ruleid:-Microsoft.Design#CA1000;/ruleid:-Microsoft.Design#CA1002
请注意,用分号分隔两个规则,而不是空格。这很糟糕,fxcop无法识别-我在那里需要一个空间。
现在,这是一个简单的示例,因此我可以这样声明:
<PropertyGroup>
<R>/ruleid:-Microsoft.Design#CA1000 /ruleid:-Microsoft.Design#CA1002</R
</PropertyGroup>
但是,我不喜欢这样,因为实际上我有很多规则希望禁用,而像这样列出所有规则是我希望避免的。
最佳答案
要使用分号以外的字符来分隔每个项目,请使用语法@(myType, 'separator')
<ItemGroup>
<R Include="-Microsoft.Design#CA1000" />
<R Include="-Microsoft.Design#CA1002" />
</ItemGroup>
<Target Name="FxcopRulesFlattening">
<!-- Using the syntax @(ItemName, 'Separator')-->
<Message Text="@(R -> '/ruleid:%(Identity)', ' ')"/>
</Target>
关于msbuild - 如何使msbuild ItemGroup项目用空格而不是分号分隔?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3008927/