1

我有一个有效的虚拟路径提供程序,为动态生成的剃刀文件提供服务。问题是当这些 razor 文件更改时,需要重新启动应用程序池。我相信通常文件监视器会为磁盘上的传统剃须刀文件处理这个问题。

如何标记或过期通过虚拟文件提供程序提供的剃须刀文件,以便 ASP.NET 无需重新启动应用程序池即可获取我的新剃须刀更改?

4

1 回答 1

2

这当然是可能的。

您只需要创建自己的VirtualPathProvider(看起来您已经完成了),并确保覆盖该方法:

public override CacheDependency GetCacheDependency(string virtualPath, 
                          IEnumerable virtualPathDependencies, DateTime utcStart)

当我这样做时,我的场景只需要返回物理文件路径的缓存依赖关系,例如

string physicalPath = GetPhysicalPath(virtualPath);
return new CacheDependency(physicalPath);

取决于你在做什么,这可能足够也可能不够。

在我的特定场景中,我不需要担心virtualPathDependencies有多个条目的情况(例如,如果virtualPath表示包含多个文件的目录)。我的提供者也很简单——在大多数情况下,我委托给默认提供者。

您可能已经知道这一点,但为了未来读者的利益,还请务必注册虚拟路径提供程序,例如 in Application_Start()of the global.asax,可以这样完成:

//get the default provider if your custom provider delegates to it.
var defaultProvider = HostingEnvironment.VirtualPathProvider;
//register the custom provider.
HostingEnvironment.RegisterVirtualPathProvider(new MyCustomVirtualPathProvider(defaultProvider));
于 2014-10-06T17:09:50.903 回答