从Razor View引用动态程序集

5
如果我在MVC控制器中动态编译和加载程序集(此处为视图模型),那么如何在Razor视图中引用该程序集?由于使用了lambda表达式,因此无法使用dynamic类型的模型。如果我创建一个dll文件,将其写入bin文件夹,然后加载它,一切都正常。但这会导致AppDomain回收。
我意识到,在某些情况下,这种方法可能是一个非常糟糕的想法。这是为了允许自动生成代码和视图的预览功能。负载不是一个问题。我只是不希望每个请求都重新启动应用程序。
1个回答

0
您可以将 .cshtml 文件放入一个与控制器和模型代码不编译的单独项目中。由于 .cshtml 文件会被单独即时编译,这样在重新编译目标程序集时就能避免重新编译。但这也会引入自己的问题。
另一个选择是使用 dynamic 或其他非强类型方法,并认识到这意味着您无法使用 lambda 表达式或其他强类型构造。大多数需要 lambda 的帮助程序也有采用简单字符串的版本,并且必要时仍然可以手动构建表达式树,虽然这需要更多的代码。

谢谢,但我想避免的不是视图重新编译。我想要防止MVC应用程序的AppDomain重启。这是因为我必须将我的动态程序集写入bin文件夹,以便视图能够引用其类型。 - CuriousLayman
@CuriousLayman:所以视图在运行时不能使用不驻留在 Web 项目的 bin 文件夹中的类型?我猜这是有道理的。你每天都会学到新东西。 :-) - StriplingWarrior
1
最后我们决定为预览功能使用动态视图模型。我曾试图避免使用它,但似乎没有一个可接受的方法来解决这个问题。 - CuriousLayman
是的,对此我感到抱歉。祝你好运! - StriplingWarrior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接