Asp.net mvc 4 带有捆绑和缩小功能的ASP.NET MVC 4应用程序,为什么在调试模式下启用缩小功能?

Asp.net mvc 4 带有捆绑和缩小功能的ASP.NET MVC 4应用程序,为什么在调试模式下启用缩小功能?,asp.net-mvc-4,bundling-and-minification,asp.net-optimization,Asp.net Mvc 4,Bundling And Minification,Asp.net Optimization,我刚刚将一个ASP.NET MVC 3项目迁移到MVC 4/.NET 4.0,并安装了NuGet packageMicrosoft.AspNet.Web.Optimization,以支持CSS和JavaScript的捆绑和缩小。我已经基本实现了捆绑/缩小功能,问题是它总是处于启用状态。即使应用程序处于调试模式(如Web.config中配置的),所有JavaScript包含的内容都会缩小。从下面的XML代码段可以看到,在Web.config中启用了调试模式: <system.web>

我刚刚将一个ASP.NET MVC 3项目迁移到MVC 4/.NET 4.0,并安装了NuGet package
Microsoft.AspNet.Web.Optimization
,以支持CSS和JavaScript的捆绑和缩小。我已经基本实现了捆绑/缩小功能,问题是它总是处于启用状态。即使应用程序处于调试模式(如Web.config中配置的),所有JavaScript包含的内容都会缩小。从下面的XML代码段可以看到,在Web.config中启用了调试模式:

<system.web>
  <compilation debug="true" targetFramework="4.0">
    ...
  </compilation>
  ...
</system.web>
CSS/JavaScript包含在HTML中呈现,例如:

<link href="/content/css" rel="stylesheet" type="text/css">
<script src="/bundles/jquery" type="text/javascript"></script>
@Styles.Render("~/content/css")
@Scripts.Render("~/bundles/jquery")

多亏了Hao,我意识到我忘了在bundle名称前面加“~/”

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

如果您使用的是Script/Style.Render,即

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

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

我刚刚在一个全新的ASP.NET MVC项目中实现了这一点。我在web.config中将
设置为true,并且仍在获得缩小的输出

修复程序

BundleConfig.cs(在App_Start中)在底部有一行
BundleTable.EnableOptimizations=true覆盖了我的web.config设置

删除该行并/或将其设置为false,这样我就可以在调试环境中根据需要将脚本设置为未统一/未绑定

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


有关这方面的更多信息,请参阅并阅读控制捆绑和缩小部分(大约在文章的一半部分)。

这个问题可能会有所帮助@jrummell这个问题的答案似乎是无条件禁用缩小?我只想让标准的条件缩微生效。谢谢你。但是如果没有给定虚拟路径,@Scripts.Render(…)不应该抛出异常吗?您希望何时编写@Scripts.Render(“/bundles/jquery”),即不使用“~”?它不仅限于捆绑URL,还将脚本/链接标记呈现到任意URL(相对和绝对)。长期的想法是让这些助手处理一般的资产管理,而不仅仅是特定于捆绑包的助手。好的,感谢您的澄清。但是我们今天浪费了半天时间,因为有人忘记输入“~”@haokong您介意研究一下这个问题吗:这就是我的问题。BundleConfig.cs的默认模板似乎随着时间的推移发生了变化。我敢肯定那以前从来没有在那里
< script src="/bundles/jquery?v=wvLq7H7qEZB2giyIRn7aEZAxhHOb2RfTYYh2HMd9EqM1"/>
@Styles.Render("~/content/css")
@Scripts.Render("~/bundles/jquery")