我有一个自定义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;
 obj\**\*.*;
 **\_references.js;
 [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/