我对这个自定义 MSBuild 目标是否做错了什么导致 Visual Studio 出现此行为?
我有一个自定义 MSBuild 任务,它将单独的 javascript 文件捆绑到一个文件中,它在 csproj 文件中的使用方式如下:
<ItemGroup>
<ScriptBundler Include="**\*.js" Exclude="app.js" />
</ItemGroup>
问题: 当我添加与
myNewFile.js
中的路径匹配的新 Include
时,Visual Studio 会自动将此行添加到 csproj 中:
<ScriptBundler Remove="myNewFile.js" />
我或其他同事通常需要大约一个小时的调试时间才能弄清楚为什么我的新脚本没有正确捆绑。
问题: 我可以用
Include="**\*.js"
做一些不同的事情来阻止这种情况发生吗?或者,我可以在自定义任务中执行某些操作来告诉 Visual Studio 贪婪地添加新文件吗?
自定义构建任务接受如下文件的输入:
[Required]
public ITaskItem[] Files { get; set; }
我对这个自定义 MSBuild 目标是否做错了什么,导致 Visual Studio 出现此行为?
不,根据我的测试,我可以在 VS2022(17.10.4) 中重现相同的行为。 当我将新文件添加到 MSBuild 项时,该元素会自动添加到项目文件中。我想这种行为是设计使然并且有特定目的:增量构建。
如果您想阻止自动添加元素,这里有一个解决方法:在 ItemGroup 中使用 Condition="'$(DesignTimeBuild)' != 'true'" 。
例如:
<ItemGroup Condition="'$(DesignTimeBuild)' != 'true'">
<ScriptBundler Include="wwwroot\js\*.js" Exclude="wwwroot\js\app.js" />
</ItemGroup>
有关DesignTimeBuild的更多信息,请参考文档: https://github.com/dotnet/project-system/blob/main/docs/design-time-builds.md