lis*_*ite 30 .net css c# asp.net-mvc bundling-and-minification
我在BundleConfig.cs中配置了以下捆绑包:
bundles.Add(new StyleBundle("~/bundles/css").Include(
"~/assets/bootstrap/css/bootstrap.css",
"~/assets/css/global/all.css"));
Run Code Online (Sandbox Code Playgroud)
我使用以下内容引用它:
@Styles.Render("~/bundles/css")
Run Code Online (Sandbox Code Playgroud)
当我处于调试模式(web.config编译debug="true")时,它按预期工作,因为它将两个css文件呈现为正常,即:
<link href="/assets/bootstrap/css/bootstrap.css" rel="stylesheet"/>
<link href="/assets/css/global/all.css" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
但是,当我设置debug="false"上述行为仍然发生时,它确实识别文件,但它只是正常渲染它们.
为了确认捆绑绝对可行,我已经在BundleConfig中启用了优化,即 BundleTable.EnableOptimizations = true;
每当我执行上述操作时,它会捆绑css并按预期显示,即:
<link href="/bundles/css?v=WBKHkZAJly7jUzHrVDT8SwfaQE-CA9dbOUQUlLKadNE1" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
编辑:
有些人提到将以下代码添加到我的BundleConfig.cs文件中将实现我的目标:
#if DEBUG
BundleTable.EnableOptimizations = false;
#else
BundleTable.EnableOptimizations = true;
#endif
Run Code Online (Sandbox Code Playgroud)
我理解并欣赏这个响应,但根据文档,MVC捆绑的默认行为是在发布模式下捆绑但不在调试模式下捆绑.我不明白为什么我应该添加额外的代码来使它在它应该已经完成时执行此操作.
编辑2
我忏悔了.事实证明我打开了Views文件夹中的web.config而不是主web.config.我更改了主web.config中的设置,这对我来说很好.我责怪ReSharper
Tja*_*alt 28
这是默认行为.
通过在Web.config文件中的编译元素中设置debug属性的值来启用或禁用捆绑和缩小.
http://www.asp.net/mvc/overview/performance/bundling-and-minification
kri*_*gar 14
我解决这个问题的方法是强迫它BundleConfig完成我想做的事情.我不认为MVC4与配置文件有相同的选项(或者我从来没有让它们工作).
这就是我在RegisterBundles方法结束时所拥有的:
#if DEBUG
BundleTable.EnableOptimizations = false;
#else
BundleTable.EnableOptimizations = true;
#endif
Run Code Online (Sandbox Code Playgroud)
这种方式总是在那里,很明显.但是,当你启动项目时,你必须记住把它放在那里,但那并不是什么大不了的事.
如果您不熟悉这些,那么这#if DEBUG是一个预处理程序指令,它告诉CLR在存在DEBUG构建参数时执行该块中的操作(应该只在DEBUG模式下出现,尽管可以从Project Properties更改) ).如果该变量不存在(释放模式或任何其他模式),则它将执行另一个块.
小智 6
默认的Release Web.config转换将删除调试属性,如下所示:
<compilation xdt:Transform="RemoveAttributes(debug)" />
Run Code Online (Sandbox Code Playgroud)
但是,这不会导致发生预期的捆绑行为。相反,您必须创建一个将字面意义上的debug属性设置为“ false”的转换,如下所示:
<compilation debug="false" xdt:Transform="SetAttributes" />
Run Code Online (Sandbox Code Playgroud)
另一个可能的问题是,在方法中的Global.asax.cs文件内部Application_Start(),您错过了对BundleConfig.
例如,假设你的方法是使用默认名称RegisterBundles(BundleCollection bundles),然后里面你的Global.asax.cs文件,你要添加BundleConfig.RegisterBundles(BundleTable.Bundles);的Application_Start()方法。
所以你的Global.asax.cs文件可能看起来像这样:
using System;
using System.Collection.Generic;
using System.Linq;
using System.Web;
using System.Http;
using System.Mvc;
using System.Routing;
using System.Optimization;
namespace MyProject
{
public class MvcApplication : System.Web.HttpApplication
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
// ** This line right below might be what you are missing **
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
Run Code Online (Sandbox Code Playgroud)