Visual studio 2013 在发布\编译时使Visual Studio缩小css和js

Visual studio 2013 在发布\编译时使Visual Studio缩小css和js,visual-studio-2013,minify,Visual Studio 2013,Minify,我有一个在一个站点(实际上是多个站点)上作为子应用程序工作的项目。除此之外,我在这个项目中有几个静态css和js文件。我需要将它们作为单独的js和css文件保存,但为了让google满意,我想缩小它们。这些文件将来可能会被修改,所以我希望避免每次更改时手动缩小它们 是否有一些选项允许我在编译或发布时缩小这些文件(而不是编写生成事件以使用外部工具缩小这些文件)。以下内容适用于VS2015,它对这种情况有更好的支持 VS2015引入了对gulp或grunt等任务运行程序的支持。您可以使用其中一个,并

我有一个在一个站点(实际上是多个站点)上作为子应用程序工作的项目。除此之外,我在这个项目中有几个静态css和js文件。我需要将它们作为单独的js和css文件保存,但为了让google满意,我想缩小它们。这些文件将来可能会被修改,所以我希望避免每次更改时手动缩小它们


是否有一些选项允许我在编译或发布时缩小这些文件(而不是编写生成事件以使用外部工具缩小这些文件)。

以下内容适用于VS2015,它对这种情况有更好的支持

VS2015引入了对gulp或grunt等任务运行程序的支持。您可以使用其中一个,并在打开项目时触发一个任务(即在处理项目时始终运行),该任务本身将监视文件更改并运行最小化(即在保存时执行)

VS2015中的gulp简介可用


VS2015上的一个更简单的替代方案是使用,它基本上可以自动完成上述工作,而您只需较少的设置工作。

我发现的所有解决方案都需要为最小化版本使用不同的文件名,并且在使用普通/缩小版本之间切换需要大量额外的工作

相反,我希望压缩的JavaScript文件具有原始名称,这样我就不必更改HTML标记中的引用。我可以在我的开发环境中使用普通的Javascript文件,然后在发布时自动部署最小化版本

我找到了一个简单的解决方案

首先,安装

然后,在Visual Studio项目文件中,在关闭标记之前添加以下内容:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\Microsoft Ajax Minifier\ajaxmin.tasks" />
<Target Name="AfterBuild" Condition="'$(ConfigurationName)'=='Release'">
  <ItemGroup>
    <JS Include="**\*.js" Exclude="**\*.min.js;obj\**\*.*" />
  <CSS Include="**\*.css" Exclude="**\*.min.css;obj\**\*.*" />
  </ItemGroup>
  <AjaxMin
    JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".jsMIN"
    CssSourceFiles="@(CSS)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".cssMIN" />
</Target>
<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
  <ItemGroup>
    <MinJS Include="**\*.jsMIN" />
    <FilesForPackagingFromProject Include="%(MinJS.Identity)">
      <DestinationRelativePath>%(RecursiveDir)%(Filename).js</DestinationRelativePath>
    </FilesForPackagingFromProject>
    <MinCSS Include="**\*.cssMIN" />
    <FilesForPackagingFromProject Include="%(MinCSS.Identity)">
      <DestinationRelativePath>%(RecursiveDir)%(Filename).css</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

自定义文件;
$(将所有文件复制到SingleFolderForpPackageDependson);
%(RecursiveDir)%(文件名).js
%(递归目录)%(文件名).css
上面的代码是做什么的?在Visual Studio中发布时,此代码将在源代码中找到每个
.js
.css
文件,并使用扩展名
.jsMIN
.cssMIN
创建一个缩小副本。它将忽略已缩小的文件。然后,它将使用原始文件名将这些缩小的文件复制到部署文件夹

瞧!您刚刚发布了缩小的JS/CSS文件,而您的原始文件在您的开发环境中保持不变

可选:
想要将Ajax迷你程序打包到您的项目中吗?从Ajax Minifier安装文件夹,您可以将
AjaxMin.dll
AjaxMinTask.dll
直接移动到源目录中。我把它们放在我的
App\u Data
文件夹中。一旦它们在源代码中的某个位置,在Visual Studio中右键单击它们,选择
包含在项目中
,并将其
生成操作
属性更改为

然后在我上面包含的代码中,更改



完成了

故障排除提示:

我上面的主代码仅在配置为“发布”时才执行“后构建”。因此,它将仅在发布期间运行。如果您的配置被命名为其他名称,或者您希望它在其他情况下运行,请根据需要修改代码。

可以从Visual studio Marketplace下载一个不错的工具


知道这一点很好,但现在我正在做一个VS2013项目,迁移是不可能的。@jahu你找到了吗?@XaweryWiśniowiecki起初我用的是yuicompressor,但在同事的计算机上不起作用,因为他没有安装Java。最后,我使用了
System.Web.Optimization
中的绑定。