Asp.Net Bundle - 如何在缩小失败时引发异常
Asp.Net Bundle - How to raise exception when minification fails
我正在使用 Asp.Net MVC 5 和来自 System.Web.Optimization 1.1.0.0 的捆绑和缩小系统:
bundles.Add(new ScriptBundle("~/angularLibraries").Include(
......
));
然后渲染 Bundle:
@Scripts.Render("~/angularLibraries")
我不时通过在浏览器中打开相应的 url 手动检查我的包的状态,有时我发现它们有错误。示例:
/* Minification failed. Returning unminified contents.
(262,145-152): run-time error JS1019: Can't have 'break' outside of loop: break a
(40,297-304): run-time error JS1019: Can't have 'break' outside of loop: break a
*/
因为压缩机制returns压缩失败时未压缩的内容,直到我在浏览器中手动打开该压缩包,我才意识到错误。
如何设置 Bundling 系统以在缩小失败时引发异常,以便我可以立即意识到错误?
找到解决办法。我创建了一个派生自 ScriptBundle 的自定义 class 并覆盖了方法 ApplyTransforms:
public class CustomScriptBundle : ScriptBundle
{
public CustomScriptBundle(string virtualPath)
: base(virtualPath)
{
}
public CustomScriptBundle(string virtualPath, string cdnPath)
: base(virtualPath, cdnPath)
{
}
public override BundleResponse ApplyTransforms(BundleContext context, string bundleContent, IEnumerable<BundleFile> bundleFiles)
{
BundleResponse bundleResponse = base.ApplyTransforms(context, bundleContent, bundleFiles);
if (bundleResponse.Content.StartsWith("/* Minification failed. Returning unminified contents."))
ExceptionManager.LogMessage("Minification failed for following bundle: " + context.BundleVirtualPath);
return bundleResponse;
}
}
我最终记录了一条消息(收到来自 Elmah 的电子邮件通知)并且没有抛出异常,因为我只在生产环境中默认启用了缩小,而且应用程序将继续正常工作。
如果抛出异常,您会看到这样的结果:
此解决方案也适用于 StyleBundle。
我正在使用 Asp.Net MVC 5 和来自 System.Web.Optimization 1.1.0.0 的捆绑和缩小系统:
bundles.Add(new ScriptBundle("~/angularLibraries").Include(
......
));
然后渲染 Bundle:
@Scripts.Render("~/angularLibraries")
我不时通过在浏览器中打开相应的 url 手动检查我的包的状态,有时我发现它们有错误。示例:
/* Minification failed. Returning unminified contents.
(262,145-152): run-time error JS1019: Can't have 'break' outside of loop: break a
(40,297-304): run-time error JS1019: Can't have 'break' outside of loop: break a
*/
因为压缩机制returns压缩失败时未压缩的内容,直到我在浏览器中手动打开该压缩包,我才意识到错误。
如何设置 Bundling 系统以在缩小失败时引发异常,以便我可以立即意识到错误?
找到解决办法。我创建了一个派生自 ScriptBundle 的自定义 class 并覆盖了方法 ApplyTransforms:
public class CustomScriptBundle : ScriptBundle
{
public CustomScriptBundle(string virtualPath)
: base(virtualPath)
{
}
public CustomScriptBundle(string virtualPath, string cdnPath)
: base(virtualPath, cdnPath)
{
}
public override BundleResponse ApplyTransforms(BundleContext context, string bundleContent, IEnumerable<BundleFile> bundleFiles)
{
BundleResponse bundleResponse = base.ApplyTransforms(context, bundleContent, bundleFiles);
if (bundleResponse.Content.StartsWith("/* Minification failed. Returning unminified contents."))
ExceptionManager.LogMessage("Minification failed for following bundle: " + context.BundleVirtualPath);
return bundleResponse;
}
}
我最终记录了一条消息(收到来自 Elmah 的电子邮件通知)并且没有抛出异常,因为我只在生产环境中默认启用了缩小,而且应用程序将继续正常工作。
如果抛出异常,您会看到这样的结果:
此解决方案也适用于 StyleBundle。