我有一个自定义的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 var中包含了额外的“文件”。)
然后我从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>
(这不会破坏构建中的任何内容,但会破坏将字符串拆分为多行的目的。)
如何将这些排除分成多行?
答案 0 :(得分:4)
我找到了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
文件更具可读性。