如何将ItemGroup的排除项分成多行?

Sco*_*don 2 msbuild

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

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js;obj\**\*.*;**\_references.js;[snip]" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js" />
  <JS Exclude="obj\**\*.*" />
  <JS Exclude="**\_references.js" />
  [snip]
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js;obj\**\*.*;**\_references.js;[snip]" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

然后,我从MSBuild Items的文档中了解到,该Exclude属性仅影响该Include属性在同一元素中添加的项目。

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

<ItemGroup>
  <JS Include="**\*.js"
      Exclude="**\*.min.js;
               obj\**\*.*;
               **\_references.js;
               [snip]" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js;&#xD;&#xA;                   obj\**\*.*;&#xD;&#xA;                   **\_references.js;&#xD;&#xA;                   [snip]" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

Sco*_*don 6

我找到了有关从中排除文件的答案Content,这也是的一部分ItemGroup。所以我尝试了:

<ItemGroup>
  <JS Include="**\*.js" Exclude="**\*.min.js" />
  <JS Remove="obj\**\*.*" />
  <JS Remove="**\_references.js" />
  [snip]
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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