由于捆绑压缩会对所有包含的文件进行压缩,无法设置忽略对某个js文件的压缩。导致压缩该js后,脚本出错的问题。

解决方式:

  重写 ScriptBundle 的 GenerateBundleResponse 。代码如下

  

  1. public class ScriptBundleFileIgnoreZip: ScriptBundle
  2. {
  3.  
  4. readonly HashSet<string> bundles = new HashSet<string>();
  5.  
  6. /// <summary>
  7. /// 构造函数
  8. /// </summary>
  9. /// <param name="virtualPath"></param>
  10. public ScriptBundleFileIgnoreZip(string virtualPath) : base(virtualPath) { }
  11.  
  12. /// <summary>
  13. /// 忽略压缩包含文件
  14. /// </summary>
  15. /// <param name="virtualPaths">文件组</param>
  16. /// <returns></returns>
  17. public Bundle IgnoreMinInclude(params string[] virtualPaths)
  18. {
  19. foreach (string path in virtualPaths)
  20. {
  21. string cPath = path.TrimStart('~');
  22. if (!bundles.Contains(cPath))
  23. {
  24. bundles.Add(cPath);
  25. }
  26. }
  27.  
  28. return base.Include(virtualPaths);
  29. }
  30.  
  31. /// <summary>
  32. /// 生成压缩捆绑响应文
  33. /// </summary>
  34. /// <param name="context">捆绑上下文</param>
  35. /// <returns></returns>
  36. public override BundleResponse GenerateBundleResponse(BundleContext context)
  37. {
  38. if (context == null)
  39. {
  40. throw new ArgumentNullException("context");
  41. }
  42. IEnumerable<BundleFile> enumerable = this.EnumerateFiles(context);
  43. enumerable = context.BundleCollection.IgnoreList.FilterIgnoredFiles(context, enumerable);
  44. enumerable = this.Orderer.OrderFiles(context, enumerable);
  45. if (this.EnableFileExtensionReplacements)
  46. {
  47. enumerable = context.BundleCollection.FileExtensionReplacementList.ReplaceFileExtensions(context, enumerable);
  48. }
  49.  
  50. StringBuilder bundleContent = new StringBuilder();
  51. string text2 = ";" + Environment.NewLine;
  52. Microsoft.Ajax.Utilities.Minifier minifier = new Microsoft.Ajax.Utilities.Minifier();
  53. foreach (var bf in enumerable)
  54. {
  55. if (bundles.Contains(bf.VirtualFile.VirtualPath))
  56. {
  57. bundleContent.Append(bf.ApplyTransforms());
  58. }
  59. else
  60. {
  61. bundleContent.Append(minifier.MinifyJavaScript(bf.ApplyTransforms(), new Microsoft.Ajax.Utilities.CodeSettings()
  62. {
  63. EvalTreatment = Microsoft.Ajax.Utilities.EvalTreatment.MakeImmediateSafe,
  64. PreserveImportantComments = false
  65. }));
  66. }
  67.  
  68. bundleContent.Append(text2);
  69. }
  70.  
  71. if (this.Transforms != null)
  72. {
  73. this.Transforms.Clear();
  74. }
  75.  
  76. return this.ApplyTransforms(context, bundleContent.ToString(), enumerable);
  77.  
  78. }

用法:

  1. var scriptBundles = new ScriptBundleFileIgnoreZip("~/JS");
  2.  
  3. scriptBundles.Include("~/要压缩的文件0.js");
  4. scriptBundles.IgnoreMinInclude("~/忽略压缩的文件.js")
  5. .Include("~/要压缩的文件1.js", "~/要压缩的文件2.js");
  6.  
  7. BundleTable.Bundles.Add(scriptBundles);

Asp.Net Mvc ScriptBundle 脚本文件捆绑压缩 导致 脚本出错的问题的更多相关文章

  1. [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传

    原文 [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传 Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件 ...

  2. ASP.NET MVC 导出CSV文件

    ASP.NET MVC   导出CSV文件.直接贴代码 /// <summary> /// ASP.NET MVC导出CSV文件Demo1 /// </summary> /// ...

  3. asp.net Mvc 模型绑定项目过多会导致页面运行时间卡

    asp.net Mvc 模型绑定项目过多会导致页面运行时间卡的问题. 解决方式就是采用ModelView方式进行精简,已减少模型绑定及验证的时间.

  4. asp.net mvc 应用Bundle(捆绑和微小)压缩技术 启用 BundleConfig 配置web.config

    从MVC4开始,我们就发现,项目中对Global.asax进行了优化,将原来在MVC3中使用的代码移到了 [App_Start]文件夹下,而Global.asax只负责初始化.其中的BundleCon ...

  5. Asp.Net MVC 文件管理Demo(文件展示,上传,下载,压缩,文件重命名等)

    之前 ,有想做一个文件管理页面. 参考了 许多资料,终于完成了一个基于Asp.net MVC 的文件管理Demo.界面如下.   一,实现功能及相关技术 文件管理Demo基于Asp.NET MVC , ...

  6. ASP.NET MVC 静态资源打包和压缩问题小记

    ASP.NET MVC 中有个 BundleConfig 用于静态资源的打包和压缩,我在使用的过程中遇到一些问题,现在做下总结,并给出具体的解决方案. 问题一:打包压缩后的 JavaScript 和 ...

  7. ASP.NET MVC实现Excel文件的上传下载

    在应用系统开发当中,文件的上传和下载是非常普遍的需求.在基于.NET的C/S架构的项目开发当中,有多种方案可以实现文件的上传和下载(httpwebrequest.webclient等),而且多采用异步 ...

  8. Asp.Net MVC 3.0 使用Gzip压缩

    前言 Gzip最早由Jean-loup Gailly和Mark Adler创建,用于Unix系统的文件压缩.我们在Linux中经常会用到后缀为.gz的文件,它们就是Gzip格式的.现今已经成为Inte ...

  9. [Fine Uploader] 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]

    Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件的 Javascript 组件   This project attempts to ach ...

随机推荐

  1. Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default

    sudo vim /etc/xorg.conf copy: Section "Monitor" Identifier "Monitor0" VendorName ...

  2. day5:vcp考试

    Q81. An administrator needs to recover disk space on a previously-used thin provisioned virtual disk ...

  3. css菜鸟学习之text-align属性,行内元素,块级元素居中详解

    一.text-align属性 1.text-align用来设置元素中的的文本对齐方式,例如:如果需要设置图片的对齐方式,需要设置图片的父元素的text-align属性: 2.text-align只对文 ...

  4. 带最小值操作的栈 · Min Stack

    [抄题]: 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. [思维问题]: [一句话思 ...

  5. Spring框架之什么是IOC的功能?

    1. 什么是IOC的功能? * IoC -- Inverse of Control,控制反转,将对象的创建权反转给Spring!! * 使用IOC可以解决的程序耦合性高的问题!!  

  6. 解决ios手机页面overflow scroll滑动很卡的问题

    在移动端html中经常出现横向/纵向滚动的效果,但是在iPhone中滚动速度很慢,感觉不流畅,有种卡卡的感觉,但是在安卓设备上没有这种感觉; 要解决这个问题很简单: 一行代码搞定 -webkit-ov ...

  7. Ubuntu 下如何查看已安装的软件

    1.查看安装的所有软件 dpkg -l 例如:dpkg -l | grep ftp <span style="font-size:18px;">:~$ dpkg -l ...

  8. Oracle LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  9. BZOJ1699: [Usaco2007 Jan]Balanced Lineup排队 - 线段树

    description 查询区间最大和最小 题解 线段树 愉悦身心啊 代码 #include<cstring> #include<cstdio> #include<alg ...

  10. Fiddler的钩子hook导致电脑无法连上网络

    今天,电脑怎么都无法连上网络,重启了几次电脑也不行,网络环境是没有问题的,后来同事告诉我,Fiddler有一个BUG,就是Fiddler获取钩子之后没有释放掉,必须启动Fiddler,再关闭Fiddl ...