visual-studio - 如何在构建时缩小已更改(并且仅更改它们)的 JavaScript 文件(也就是将 "ItemGroup"添加到 csproj 后的重复项)

标签 visual-studio msbuild csproj buildaction

我已将以下代码添加到我的 .csproj 中,以缩小构建项目时已更改的 JS 文件:

<Target Name="BeforeBuild">
  <MSBuild Targets="CheckAndMinifyJS" Projects="$(MSBuildProjectFile)" />
</Target>
<ItemGroup>
  <JS Include="$(ProjectDir)\**\*.js" />
</ItemGroup>
<Target Name="CheckAndMinifyJS" Inputs="@(JS)" Outputs="@(JS->'$(ProjectDir)%(RecursiveDir)%(Filename).min.js')">
  <AjaxMin JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js" />
</Target>
<UsingTask TaskName="AjaxMin" AssemblyFile="..\..\ThirdParty\AjaxMinTask.dll" />

这很好用,但它有一个副作用:当您在 Visual Studio (2015) 中查看项目时,所有 JS 文件都出现重复(相同的路径,但不同的构建操作):

Duplicate items

我想避免在项目中出现带有“JS”构建操作的项目。我怎样才能做到这一点?

请注意,多个开发人员正在处理该项目,因此任何建议的解决方案都应包含在 .csproj 或解决方案中(例如:要求所有开发人员修改其注册表以更改 JS 文件的默认构建操作是 Not Acceptable )。

最佳答案

隐藏您的 ItemGroup从 Visual Studio 中,将其移动到中间 Target .除了该更改之外,以下代码还过滤了现有的 Content项目而不是再次递归文件系统。这可确保您不会收到无关的信息 .js文件(例如 obj\ 中的中间输出文件,或由脚本生成但未明确添加到项目中的 .min.js 文件)。

  <Target Name="BeforeBuild">
    <MSBuild Targets="CheckAndMinifyJS" Projects="$(MSBuildProjectFile)" />
  </Target>
  <Target Name="GetJSItems" BeforeTargets="CheckAndMinifyJS">
    <ItemGroup>
      <JS Include="@(Content)" Condition=" '%(Extension)' == '.js' " />
    </ItemGroup>
  </Target>
  <Target Name="CheckAndMinifyJS" Inputs="@(JS)" Outputs="@(JS->'$(ProjectDir)%(RecursiveDir)%(Filename).min.js')">
    <AjaxMin JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js" />
  </Target>
  <UsingTask TaskName="AjaxMin" AssemblyFile="..\..\ThirdParty\AjaxMinTask.dll" />

关于visual-studio - 如何在构建时缩小已更改(并且仅更改它们)的 JavaScript 文件(也就是将 "ItemGroup"添加到 csproj 后的重复项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31968993/

相关文章:

c# - 在 mstest 期间创建文件 - System.UnauthorizedAccessException

visual-studio - 项目GUID不断变化

c# - .NET Core NuGet EF Core 版本不匹配

jenkins - 如何在 Jenkins 中声明全局变量并在每个单独项目的 MSBuild 任务中使用它

jenkins - 在命令行中构建 UWP 应用程序(使用 MSBUILD)

c++ - 如何从预编译的 dll 中删除 list

azure - Azure 中的 Visual Studio Team Services 构建服务器

visual-studio-2017 - VS 模板参数 : Get partial project name

powershell - 如何让 nuget (powershell) 在 objective-c sproj 文件中插入 <DependentUpon> 元素

c# - 来自单个 DotNet Core 项目配置文件的多个二进制文件