ASP.NET MVC 4 app捆绑和缩小,为什么在调试模式下启用缩小?

时间:2012-08-14 12:43:57

标签: asp.net-mvc-4 bundling-and-minification asp.net-optimization

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

<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 Internet应用程序,并且可以验证CSS / JavaScript在此项目的调试模式下是否缩小。

修改

在我的_Layout.cshtml文件中,我像这样渲染样式/脚本:

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

感谢郝,我意识到我忘了用“〜/”。

作为捆绑名称的前缀

2 个答案:

答案 0 :(得分:17)

红旗标记是HTML中呈现的链接/脚本标记:

如果您使用的是Script / Style.Render,那么它们应包含版本哈希码,即

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

要获取MVC4模板正在使用的调试/发布行为,您还必须使用Script / Style.Render方法。调用这些方法时,必须在示例中传递虚拟包路径:

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

在调试模式下,您不应该获得指向包的链接/脚本标记(它将始终缩小/捆绑)。相反,您应该在调试模式下为各个资源获取脚本/链接标记。

答案 1 :(得分: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并阅读控制捆绑和缩小部分(大约在文章的一半)。