观察以下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/

10-11 03:38