强制ASP.NET编译使用母版页的新(非缓存)版本

时间:2012-01-26 17:39:56

标签: asp.net caching compilation master-pages

我有一个嵌入在程序集中的母版页,并通过虚拟路径提供程序提供服务。 (/_v/name.space.myMaster.master)

对主服务器的更改未反映在Web应用程序中,并且在此特定情况下,我得到与缺少ContentPlaceHolder相关的错误。我纠正了错误(ruant =“server”而不是runat =“server”)然而,我仍然得到错误。

我已将.master作为允许的扩展名,并确认通过VPP提供的文件与程序集中嵌入的文件不同(我通过Reflector检查了程序集)。

我已经在VS中完成了清理/重新构建,并且已经在64个/非64个版本中修改了我的“Temporary ASP.NET Files”文件夹。我还需要做些什么来强制从母版页的非缓存版本重新编译吗?

2 个答案:

答案 0 :(得分:1)

在VirtualPathProvider类中,您可以覆盖方法GetCacheDependency以指定监视文件的依赖项。

public override CacheDependency GetCacheDependency(string virtualPath, 
  System.Collections.IEnumerable virtualPathDependencies, 
  DateTime utcStart)
    // Get the physical path to the assembly
    return new CacheDependency(path_to_assembly);
}

ASP.NET将使用此dependency来缓存对象。由于依赖项跟踪物理文件,因此只要该文件发生更改,ASP.NET就会从缓存中删除该对象。

答案 1 :(得分:0)

程序集虽然GAC并没有从Web应用程序的bin文件夹中删除,尽管在VS中运行了该项目的干净。

从bin中删除程序集的副本解决了这个问题。