在 Asp.Net MVC 中进行捆绑和缩小的方式是通过运行时的动态处理。当您创建一个包时,它可以被注入到任何 Asp.Net 页面中。如果您处于调试模式,则捆绑程序将以完整形式发送捆绑包中的每个项目,以便于调试。如果您处于发布模式,则捆绑器会自动将捆绑中各个文件的内容解析为单个内存文件流,然后将其缩小。无需在项目中明确包含 css/javascript 文件的完整版本和缩小版本。但是,根据ASP.Net 文档:
捆绑框架遵循几个常见的约定,例如:
- 当“FileX.min.js”和“FileX.js”存在时选择“.min”文件发布。
- 选择非“.min”版本进行调试。
- 忽略仅由 IntelliSense 使用的“-vsdoc”文件(例如 jquery-1.7.1-vsdoc.js)。
基本上,如果您同时拥有完整版本和缩小版本,那么框架将更喜欢使用预缩小版本而不是缩小文件本身。
在发布模式下加载页面时,捆绑和缩小的效果表现为整个捆绑包的单个 css 或 js 文件流,由对服务器的单个调用表示,例如http://localhost/MvcBM_time/bundles/AllMyScripts?v=r0sLDicvP58AIXN_mc3QdyVvVj5euZNzdsa2N1PKvb81
.
实际上,创建了一个与捆绑包名称匹配的唯一路由(AllMyScripts
在本例中)。查询字符串v
有一个值标记,它是用于缓存的唯一标识符。只要捆绑包没有更改,ASP.NET 应用程序就会AllMyScripts
使用此令牌请求捆绑包。如果捆绑包中的任何文件发生更改,ASP.NET 优化框架将生成一个新令牌,确保浏览器对捆绑包的请求将获得最新的捆绑包。
至于包含来自多个目录的文件,最简单的方法是使用通配符模式匹配。方法中指定的虚拟路径Include
和方法中的搜索模式IncludeDirectory
可以接受一个*
通配符作为最后一个路径段的前缀或后缀。搜索字符串不区分大小写。该IncludeDirectory
方法具有搜索子目录的选项。