Asp.net mvc ASP.NET MVC在重写的VirtualPathProvider中禁用视图缓存

Asp.net mvc ASP.NET MVC在重写的VirtualPathProvider中禁用视图缓存,asp.net-mvc,virtualpathprovider,Asp.net Mvc,Virtualpathprovider,我正在使用可移植区域进行一些开发工作,因此我有一个覆盖的VirtualPathProvider Mypublic override bool FileExists(string virtualPath)似乎每隔几分钟就会被调用一次,这意味着MVC正在缓存视图 这在生产中可能很好,但我不知道如何在开发中关闭它。我希望在每次使用视图时调用VirtualPathProvider 有什么建议吗?为了子孙后代回答我自己的问题 我们最终覆盖了GetCacheDependency调用,以确保从不缓存视图。(我

我正在使用可移植区域进行一些开发工作,因此我有一个覆盖的
VirtualPathProvider

My
public override bool FileExists(string virtualPath)
似乎每隔几分钟就会被调用一次,这意味着MVC正在缓存视图

这在生产中可能很好,但我不知道如何在开发中关闭它。我希望在每次使用视图时调用
VirtualPathProvider


有什么建议吗?

为了子孙后代回答我自己的问题

我们最终覆盖了GetCacheDependency调用,以确保从不缓存视图。(我们手动缓存视图)。我们必须创建一个FakeCacheDependency,让我们使用缓存中最后修改的日期

在我们的应用程序中,我们的虚拟视图称为CondorVirtualFile。(在构建视图引擎时,需要给它一个很酷的名称。)


你确定是MVC缓存了视图而不是浏览器吗?ctrl-F5查看是否调用视图。感谢您的提问和回答,它解决了我在DLL中拥有视图时相当恼人的缓存问题+谢谢你!!!我只是想分享一些想法。您还必须重写
GetFileHash()
方法。您还可以返回
null
而不是
FakeCacheDependency
实例。我发现了一个有用的资源:
public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
        {
            var view = this.GetFile(virtualPath);
            if (view is CondorVirtualFile)
            {
                FakeCacheDependency fcd = new FakeCacheDependency((view as CondorVirtualFile).LastModified);
                return fcd;
            }
            return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
        }



 public class FakeCacheDependency : System.Web.Caching.CacheDependency
    {
        public FakeCacheDependency(DateTime lastModified)
        {
            base.SetUtcLastModified(lastModified);
        }
        public FakeCacheDependency()
        {
            base.SetUtcLastModified(DateTime.UtcNow);  
        }
    }