如何使msbuild的ItemGroup项目使用空格分隔而不是分号?

18

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

但是,我不喜欢这样做,因为实际上我有很多规则希望禁用,像这样列出所有规则是我想避免的。

1个回答

26

如果需要使用除分号以外的字符来界定每个项目,可以使用语法@(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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接