我有一个有效的虚拟路径提供程序,为动态生成的剃刀文件提供服务。问题是当这些 razor 文件更改时,需要重新启动应用程序池。我相信通常文件监视器会为磁盘上的传统剃须刀文件处理这个问题。
如何标记或过期通过虚拟文件提供程序提供的剃须刀文件,以便 ASP.NET 无需重新启动应用程序池即可获取我的新剃须刀更改?
我有一个有效的虚拟路径提供程序,为动态生成的剃刀文件提供服务。问题是当这些 razor 文件更改时,需要重新启动应用程序池。我相信通常文件监视器会为磁盘上的传统剃须刀文件处理这个问题。
如何标记或过期通过虚拟文件提供程序提供的剃须刀文件,以便 ASP.NET 无需重新启动应用程序池即可获取我的新剃须刀更改?
这当然是可能的。
您只需要创建自己的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));