MVC3,构建管理器,并在视图更改时触发重新编译

时间:2011-02-23 17:42:07

标签: asp.net asp.net-mvc-3

我对MVC3视图页面激活器以及视图的更改如何触发重新编译有疑问。在BuildManager中似乎有一些神奇的东西我看不到,因为源代码不适用于符号 - 甚至反射器也看不到内部。

我所做的是实现我自己的VPP和Razor视图引擎的子类,以显示不存在于文件系统上的剃刀视图。我的模拟设置只返回字符串中的数据进行渲染。这工作正常,但不起作用的是当您更改该数据时,不会重新编译该类。目前还不清楚如何让RazorBuildProvider或BuildManager重新生成c#代码,并在从VPP返回的数据不同时重新编译它。

2 个答案:

答案 0 :(得分:2)

虽然GetCacheDependency确实是默认工作方式(并且marcind指出),但在使用自定义文件存储时,通常无法提供CacheDependency对象。

相反,您需要做的是从GetCacheDependency返回null。但是你需要实现GetFileHash才能使失效正常工作。您返回的哈希需要基于所有文件的内容。

每当您返回的哈希值与上次查询页面时的哈希值不同时,页面最终会重新编译。

当然,你应该确保如果文件没有改变你继续返回相同的哈希值,否则页面将不断重新编译,使得速度极慢。

答案 1 :(得分:0)

在您的VPP中,您需要覆盖GetCacheDependency()方法,您需要从该方法返回适当的CacheDependency对象。看看它的构造函数是否可以监视(比如文件或目录)。如果文件内容位于SQL Server实例中,也可以使用SqlCacheDependency