19

我刚将一个ASP.NET MVC 3项目迁移到MVC 4/.NET 4.0,并安装了NuGet包Microsoft.AspNet.Web.Optimization以支持CSS和JavaScript的捆绑和缩小。我几乎已经捆绑/缩小工作,问题是这是总是启用。即使应用程序处于调试模式(如Web.config中配置),所有JavaScript包含的内容都会被缩小。正如你可以从下面的XML代码段看到,调试模式在Web.config中启用:ASP.NET MVC 4应用程序捆绑和缩小,为什么在调试模式下启用缩小?

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
    ... 
    </compilation> 
    ... 
</system.web> 

我的包构造的摘录:

public class BundleConfig 
{ 
    public static void RegisterBundles(BundleCollection bundles) 
    { 
     ... 

     bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
        "~/Scripts/jquery-1.*", 
        "~/Scripts/jquery.form.js", 
        "~/Scripts/jquery.format.js")); 

     bundles.Add(new StyleBundle("~/Content/css").Include(
      "~/Content/Site.css")); 

     ... 
    } 
} 

CSS/JavaScript的包括在HTML的渲染例如:

<link href="/content/css" rel="stylesheet" type="text/css"> 
<script src="/bundles/jquery" type="text/javascript"></script> 

有没有人有任何线索,为什么缩小在我的情况下启用?我对这里失去的东西感到不知所措。为了排除故障,我创建了一个测试ASP.NET MVC 4互联网应用程序,并且可以验证CSS/JavaScript确实在而不是在此项目的调试模式下被缩小。

编辑:

在我_Layout.cshtml文件我呈现的样式/脚本是这样的:

@Styles.Render("content/css") 
@Scripts.Render("bundles/jquery") 

感谢浩,我意识到,我已经忘了前缀的束名称用“〜/”。

+0

此问题可能有帮助。 [如何禁用ASP.NET MVC 4中的Javascript/CSS minification](http://stackoverflow.com/questions/9373071/how-to-disable-javascript-css-minification-in-asp-net-mvc-4? rq = 1) – jrummell 2012-08-14 12:49:39

+0

@jrummell这个问题的答案似乎是无条件禁用缩小?我只想要标准的条件缩小工作。 – aknuds1 2012-08-14 14:11:08

回答

17

红旗在你的HTML渲染的链接/ script标签:

这些应该包含版本哈希码,如果你使用的脚本/ Style.Render,即

< script src="/bundles/jquery?v=wvLq7H7qEZB2giyIRn7aEZAxhHOb2RfTYYh2HMd9EqM1"/> 

要获得调试/发布MVC4模板正在使用的行为,您还必须使用Script/Style.Render方法。调用这些方法时,你必须通过虚拟束的路径,在你的榜样:

@Styles.Render("~/content/css") 
@Scripts.Render("~/bundles/jquery") 

在调试模式下,你不应该在束(这将永远是精缩/捆绑)指向链接/ script标签。相反,您应该在调试模式下将脚本/链接标签获取到各个资源。

+1

谢谢你。但是不应该@ Scripts.Render(...)如果没有给出虚拟路径会抛出异常?你什么时候想写@ Scripts.Render(“/ bundles/jquery”),即没有“〜”? – 2012-10-29 14:44:08

+0

它不限于捆绑网址,它们还会将脚本/链接标签呈现给任意网址(相对和绝对)。长期来看,这些助手一般处理资产管理,而不仅仅是捆绑特定的助手。 – 2012-10-29 17:44:45

+1

好的,谢谢澄清。但是我们今天浪费了半天,因为有人忘记了放入“〜”。 – 2012-10-29 17:49:19

2

我刚刚在一个全新的ASP.NET MVC项目上发生了这种情况。我在web.config中将<compilation debug="true" targetFramework="4.5.1" />设置为true,并且仍在缩小输出。

的修复

BundleConfig.cs(在App_Start)具有在底部BundleTable.EnableOptimizations = true;将其重写我的web.config设定线....

取出管线和/或将其设置为false,并且在调试环境中根据需要将我的脚本视为未绑定/解除绑定。

我建议删除该行,因为这将覆盖web.config。在web.config中进行设置具有使用web.config变换的优点,以便您可以创建不同的设置以部署到不同的环境。

欲了解更多信息,请参阅http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification并阅读控制捆绑和缩小部分(大约在文章的中间)。

+1

这是问题我似乎BundleConfig.cs的默认模板已经随着时间的推移而改变。我确定从来没有曾经在那里 – ScottG 2015-01-21 10:46:48