有没有办法跨应用程序使用 ASP.NET Bundles

2024-05-12

我使用 ASP.NET Web Optimization 包来捆绑和缩小 javascript/css 文件。

我有一些使用相同 javascript/css 文件的 ASP.NET 应用程序,现在我在每个应用程序中设置捆绑包。

我想知道是否有一种方法可以在这些应用程序之一中注册捆绑包,而其他应用程序只是使用它。

关键问题是如何在注册包的应用程序之外的其他应用程序中获取查询字符串的哈希码。


我认为这是不可能的。好吧,没有什么可以阻止您从外部应用程序渲染样式和脚本包。您可以使用本机手动拉取捆绑的资源script标签并指定绝对网址...

<script src="http://domain.com/bundles/jquery"></script>

或使用Scripts.Render剃须刀的帮手...

@Scripts.Render("http://domain.com/bundles/jquery")

但是,如果资源服务器更改这些样式/脚本包的内容,您将遇到缓存问题,因为使用应用程序将无法解析缓存查询字符串。无法解决的原因似乎很明显......Scripts.Renderhelper 使用当前应用程序的 Web 优化框架来呈现缓存查询字符串,但是,使用应用程序使用 Web 优化框架的不同实例。

我不知道这在幕后是如何工作的,我唯一确定的是,当包内容(文件)更改时,缓存查询字符串也会更改。我猜测缓存查询字符串使用某种基于机器键值或其他东西的哈希算法...这只是我的猜测,但如果您热衷于了解,您当然可以查看源代码这个的底部...

http://aspnetoptimization.codeplex.com/SourceControl/latest http://aspnetoptimization.codeplex.com/SourceControl/latest

建议1

因为这些问题似乎没有任何解决方法,如果拥有外部资源服务器来为其他应用程序提供通用样式和脚本对您的项目至关重要的话。我只需如上所述手动访问它们,并通过在捆绑包名称末尾附加一个数字来对资源进行版本控制...

@Scripts.Render("http://server.com/bundles/name1")

并更新您的应用程序以在每次更新资源时引用正确的版本,以避免浏览器呈现旧的缓存版本。

建议二

另一种方法(不会给上面的方法带来任何新内容)是实现您自己的优化例程,这似乎并不难。如果您需要的话,它可能会提供一些灵活性。看看这个艾延德的文章 http://ayende.com/blog/13314/elegant-code-raccoon-blogs-css-controller...请确保您也阅读了评论

就我个人而言,我不喜欢他将文件名附加到查询字符串的方式,但是,只要您能够解析包的 url,您就不必这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法跨应用程序使用 ASP.NET Bundles 的相关文章

随机推荐