如果Web.config中的debug=true,则禁用JS/CSS绑定



我正在使用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,但这是唯一有效的解决方案。

最新更新