我有一个工作虚拟路径提供程序,提供动态生成的razor文件。问题是,当这些剃刀文件更改时,需要重新启动应用程序池。我相信通常文件监视器会为磁盘上的传统剃刀文件处理此问题。
如何标记或过期通过虚拟文件提供程序提供的剃刀文件,以便ASP.NET在没有重新启动应用程序池的情况下获取新的剃刀更改?
答案 0 :(得分:2)
这当然是可能的。
您只需创建自己的VirtualPathProvider,(看起来您已经完成了),并确保覆盖该方法:
public override CacheDependency GetCacheDependency(string virtualPath,
IEnumerable virtualPathDependencies, DateTime utcStart)
当我这样做时,我的场景只需要返回物理文件路径的缓存依赖性,例如
string physicalPath = GetPhysicalPath(virtualPath);
return new CacheDependency(physicalPath);
取决于您正在做什么,这可能是也可能不够。
在我的特定场景中,我并不需要担心virtualPathDependencies
有多个条目的情况(例如,如果virtualPath
表示包含多个文件的目录,则可能会发生这种情况)。我的提供者也很简单 - 我在大多数情况下都委托给默认提供者。
您可能已经知道这一点,但为了未来读者的利益,还要确保注册虚拟路径提供商,例如:在Application_Start()
的{{1}}中,可以这样做:
global.asax