我正在使用BundleTransformer来捆绑和缩小遗留ASP中的JS/CSS。NET WebForms应用程序。但是,如果Web.config中的<compilation debug="true">
,我希望禁用绑定。
- 当前行为:如果是
debug=true
,资源仍然捆绑在一起,但没有任何缩减 - 所需行为:绑定和缩小仅在
debug=false
时发生否则,对单个脚本和样式表的引用将在HTML中呈现
这可能吗?
下面是我当前如何创建其中一个捆绑包的示例:
BundleConfig.cs
var jsMinifier = new BundleTransformer.JsMin.Minifiers.CrockfordJsMinifier();
var customJsTransformer = new BundleTransformer.Core.Transformers.ScriptTransformer(jsMinifier);
var CustomJsBundle = new BundleTransformer.Core.Bundles.CustomScriptBundle("~/bundles/CustomJsBundle");
foreach (var item in jsFiles)
{
CustomJsBundle.Include(item);
}
CustomJsBundle.Transforms.Clear();
CustomJsBundle.Transforms.Add(customJsTransformer);
BundleTable.Bundles.Add(CustomJsBundle);
Navigation.master
<%@ Master Language="C#" CodeFile="Navigation.master.cs" Inherits="Main_Nav" %>
<%@ Import Namespace= "System.Web.Optimization" %>
<html>
<head runat="server">
<%= Scripts.Render("~/bundles/CustomJsBundle") %>
<!-- if debug=true, I'd like the server to just render references to the individual script files
instead of the bundle -->
</head>
<body>
<!-- other markup -->
</body>
</html>
即使debug为true,Navigation.master
中的Scripts.Render
调用也始终显示一个bundle。我希望它只在debug为false时才呈现捆绑包。否则,我希望为每个单独的脚本文件呈现脚本标记,而不是用于调试目的。
我在DEBUG模式下使用RenderFormat
方法暂时解决了这个问题。否则,我使用通常的Render
方法。
例如,在我的Navigation.master:中
<% #if DEBUG %>
<%= Scripts.RenderFormat("<script src='{0}'/></script>", "~/bundles/CustomJsBundle") %>
<% #else %>
<%= Scripts.Render("~/bundles/CustomJsBundle") %>
<% #endif %>
这具有所需的效果:
- 在DEBUG模式中,使用各个文件渲染脚本标记
- 否则,将呈现带有捆绑包的单个脚本标记
我不确定是否有更好的方法,但如果有,请发表评论或提交答案。我尝试了其他可能的解决方案,例如将EnableOptimizations
设置为false
,并清除BundleTable,但这是唯一有效的解决方案。