我刚刚将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")
感谢郝,我意识到我忘了使用“〜/”来配置包名称。
解决方法
红色标记是HTML中呈现的链接/脚本标签:
如果您使用Script / Style.Render,那么它们应该包含一个版本的哈希码,即
< script src="/bundles/jquery?v=wvLq7H7qEZB2giyIRn7aEZAxhHOb2RfTYYh2HMd9EqM1"/>
要获取MVC4模板正在使用的调试/释放行为,您还必须使用Script / Style.Render方法。调用这些方法时,您必须传递虚拟包路径,在您的示例中:
@Styles.Render("~/content/css") @Scripts.Render("~/bundles/jquery")
在调试模式下,您不应该获取指向包的链接/脚本标签(这将始终是细化/捆绑的)。相反,您应该在调试模式下获取每个资源的脚本/链接标签。