配置JS打包压缩后仅完成打包未压缩,寻求解决方案
我一眼就看出问题所在啦——你的web.config里<compilation debug="true" />这个配置在搞事情!当debug设为true时,ASP.NET的Bundle机制会自动跳过压缩步骤,哪怕你手动开了BundleTable.EnableOptimizations = true也没用。
下面给你几个可行的解决办法:
临时调试用:强制覆盖debug模式的限制
你可以在RegisterBundles方法里,把BundleTable.EnableOptimizations = true放在最前面,确保它能覆盖debug配置的影响。不过这种方式适合临时测试压缩效果,正式环境不建议长期这么用。调整后的代码如下:public static void RegisterBundles(BundleCollection bundles) { // 强制开启优化,覆盖debug模式的限制 BundleTable.EnableOptimizations = true; bundles.Add(new ScriptBundle("~/bundles/app") .Include("~/app/app.js") .IncludeDirectory("~/app/Auth/", "*.js", searchSubdirectories: true) .IncludeDirectory("~/app/Common/", "*.js", searchSubdirectories: true) ); }正式环境推荐:修改web.config的debug配置
把web.config里的<compilation debug="true" targetFramework="4.5"/>改成<compilation debug="false" targetFramework="4.5"/>。这样Bundle机制会自动启用压缩,同时你的BundleTable.EnableOptimizations = true设置也能正常生效,这是生产环境的标准做法。更灵活的方式:使用web.config变换
如果你想在本地调试时保持debug=true,发布到生产环境时自动切换为debug=false,可以用web.config变换功能。在Web.Release.config里添加如下配置:<compilation xdt:Transform="Replace" debug="false" targetFramework="4.5" />这样发布时系统会自动替换debug属性,不用手动修改原web.config。
另外确认一下,你已经正确引用了System.Web.Optimization命名空间——毕竟打包已经正常工作了,只是压缩没生效,这一步应该没问题~
内容的提问来源于stack exchange,提问作者Edison Augusthy

