3

我真的很困惑这里发生了什么。

似乎 (System.Web.Optimization.)Bundle库在它捆绑的所有文件上放置了一个文件系统观察器。每当发生变化时(例如,我调整了 CSS 文件的内容),它就会重新构建包。

我已经通过向 Fiddler 中的 CSS 包的 URL 发出请求来看到这项工作,它通过 100% 的时间完美地重新生成 CSS 包来工作。

然而,在 Firefox 和 Chrome 中,只有在某些情况下,它不会*出现*访问网络服务器,并继续为我提供旧的、未修改的 CSS。

奇怪的是,即使在进行了完整的缓存刷新(ctrl+shift+r),甚至进入 chrome 并删除 *all* 缓存数据后,它仍然为我提供完全相同的旧 CSS 文件。

这让我认为错误/问题实际上是在Bundle库中 - 也许提琴手正在传递不同的请求标头或其他东西,这使得Bundle处理程序的行为不一致?

感谢这件事的任何帮助,因为它已经持续了几天。

编辑:所以我整理了以下似乎正在工作的代码

...
var styleBundle = new Bundle(virtualPath, new NoCacheTransform());
...


public class NoCacheTransform : IBundleTransform
{
    public void Process(BundleContext context, BundleResponse response)
    {
        context.EnableOptimizations = false;
        context.UseServerCache = false;
        response.ContentType = "text/css";//text/css; charset=utf-8
        response.Cacheability = HttpCacheability.NoCache;
    }
}

其中一些属性分配可能不是必需的,但它更像是一个提醒。

4

2 回答 2

1

对捆绑包进行指纹识别可能会有所帮助吗?有关详细信息,请参阅http://madskristensen.net/post/cache-busting-in-aspnet

于 2013-11-19T11:27:57.157 回答
0

我的猜测是这是一个错误。我们看到了类似的行为;并且似乎有各种错误来描述这种打开方式。可悲的是,消息来源不公开,当我联系他们时,MS 无法重现;所以它没有修复:(

https://aspnetoptimization.codeplex.com/workitem/120 https://aspnetoptimization.codeplex.com/workitem/96 https://aspnetoptimization.codeplex.com/workitem/114

于 2014-11-21T11:27:40.723 回答