虚拟路径提供程序从外部位置提供Razor文件 - 当Razor文件发生更改时,是否有任何方式不需要重新启动应用程序池?

时间:2014-05-21 15:40:19

标签: asp.net razor virtualpathprovider

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

如何标记或过期通过虚拟文件提供程序提供的剃刀文件,以便ASP.NET在没有重新启动应用程序池的情况下获取新的剃刀更改?

1 个答案:

答案 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