我有一个自定义MSBuild任务来缩小一些JavaScript文件。我创建了一个ItemGroup来定义要缩小的文件,不应该缩小的文件。我的.csproj文件中包含以下内容:

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js;obj\**\*.*;**\_references.js;[snip]" />
</ItemGroup>


我想将该属性分成几行以提高可读性(被删除的部分很长,将来可能会更长),所以我尝试了一下:

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js" />
  <JS Exclude="obj\**\*.*" />
  <JS Exclude="**\_references.js" />
  [snip]
</ItemGroup>


但这给了我这个构建错误:

error MSB4066: The attribute "Exclude" in element <JS> is unrecognized.


当我在这些后续元素中添加空的包含(Include="")时,也会发生相同的情况。 (在引号内添加一些内容可消除该错误,但在JS变量中包含了额外的“文件”。)

然后,我从the docs for MSBuild Items得知Exclude属性仅影响同一元素中Include属性添加的项目。

我还尝试仅使用一个Exclude字符串,但将字符串本身分成多行,如下所示:

<ItemGroup>
  <JS Include="**\*.js"
      Exclude="**\*.min.js;
               obj\**\*.*;
               **\_references.js;
               [snip]" />
</ItemGroup>


看起来还可以,但是当我随后从Visual Studio保存项目时,行尾被弄乱了,所以变成了:

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js;&#xD;&#xA;                   obj\**\*.*;&#xD;&#xA;                   **\_references.js;&#xD;&#xA;                   [snip]" />
</ItemGroup>


(这并没有破坏构建中的任何内容,但是破坏了将字符串分成多行的目的。)

如何将这些排除项分成多行?

最佳答案

我找到了this answer about excluding files from Content,它也是ItemGroup的一部分。所以我尝试了:

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js" />
  <JS Remove="obj\**\*.*" />
  <JS Remove="**\_references.js" />
  [snip]
</ItemGroup>


那行得通。 JS现在仅包含我想要的文件,并且csproj文件更具可读性。

关于msbuild - 如何将ItemGroup的排除项分成多行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38208731/

10-13 06:19