ASP.NET捆绑 - 默认虚拟路径是什么?

6
据我所知(因为说实话,关于System.Web.Optimization的文档非常稀少),在ASP.NET中打包的工作方式是注册一组文件(JavaScript或CSS,对应于ScriptBundleStyleBundle),并将它们与虚拟路径相关联;例如,~/bundles/jqueryui用于所有jQuery UI脚本。稍后,当您在非调试模式下运行时,ASP.NET可以缩小这些文件,并将缩小的版本提供在您指定的捆绑包的虚拟路径上。

默认的捆绑设置使用~/bundles/...作为虚拟路径注册一些脚本包,以及使用~/Content/css作为虚拟路径注册一些CSS。我的问题是,这不一致吗?使用~/bundles/js/...~/bundles/css/...之类的东西不更合理吗?实际上,~/Content目录实际上存在于真实目录中,因此甚至存在名称冲突的可能性。我认为您希望您的虚拟捆绑路径是默认不存在的目录,并且不打算在实际文件系统上创建它们。有没有什么原因使得~/Content/css用于CSS捆绑包虚拟路径,而我没有理解的原因?

1个回答

7

很好的问题,简短的回答是通常位置并不重要。然而,一些脚本文件和CSS依赖于它们在磁盘上的物理位置,因为它们使用相对路径来引用其他内容。例如,在新的ASP.NET 4.5项目中查看默认的jQuery UI捆绑包,您会发现它有一个相当长的路径。这是因为jQuery的CSS具有相对引用到一些图像文件。为了正确解析这些内容,路径很重要,否则像“..”这样的东西就无法进入正确的父目录。


谢谢,这个答案似乎很可能是微软这么做的原因,而我之前没有想到。不过我认为如果他们使用类似 ~/Content/cssBundles~/Content/jsBundles 的默认路径会更加一致。 - Jez
@jez 我在微软的MVC团队工作,所以我肯定知道它 :) - Eilon
现在有一个CssUrlRewriteTransform来解决这个问题。它将重写CSS文件中的URL,使它们相对于虚拟目录而不是原始目录;这样,即使CSS文件的位置发生了变化,它仍然可以找到原始目录中的文件。 - Triynko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接