【问题标题】:ASP.NET bundling - default virtual paths?ASP.NET 捆绑 - 默认虚拟路径?
【发布时间】:2012-10-15 10:22:00
【问题描述】:

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

默认包设置注册一些带有~/bundles/...作为虚拟路径的脚本包,以及一些带有~/Content/css作为虚拟路径的CSS。我的问题是,这不是不一致吗?拥有~/bundles/js/...~/bundles/css/... 这样的东西不是更有意义吗?事实上,~/Content 目录实际上是作为一个真实目录存在的,因此甚至存在名称冲突的可能性。我原以为您希望您的虚拟包路径是默认情况下存在的目录,并且不打算在实际文件系统上创建。 ~/Content/css 用于我不理解的 CSS 捆绑虚拟路径是否有某些原因?

【问题讨论】:

    标签: asp.net bundle asp.net-optimization web-optimization


    【解决方案1】:

    很好的问题,简而言之,一般来说这根本不重要。但是,一些脚本文件和 CSS 依赖于它们在磁盘上的物理位置,因为它们使用相对路径来引用其他内容。例如,如果您查看新 ASP.NET 4.5 项目中的默认 jQuery UI 包,您会发现它的路径相当长。那是因为 jQuery 的 CSS 对某些图像文件有相对引用。为了让那些正确解析路径很重要,否则像“..”之类的东西不会进入正确的父目录。

    【讨论】:

    • 谢谢,这个答案似乎是微软这样做的原因,我没有想到。我认为如果他们使用~/Content/cssBundles~/Content/jsBundles 之类的默认路径会更加一致。
    • @jez 我在微软的 MVC 团队工作,所以我很清楚 :)
    • 现在有一个 CssUrlRewriteTransform 来解决这个问题。它将重写您的 CSS 文件中的 URL,因此它们相对于虚拟目录,而不是原始目录;这样,尽管 CSS 文件位于新位置,它仍可以在原始目录中找到文件。
    猜你喜欢
    • 2015-09-12
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多