从Razor View参考动态装配

Cur*_*man 5 c# asp.net-mvc razor

如果我在MVC控制器中动态编译和加载程序集(在这种情况下为视图模型),如何在Razor视图中引用该程序集?我无法使用动态模型类型,因为我使用了lambda表达式。如果创建一个dll,将其写入bin文件夹,然后加载它,一切正常。但这会导致AppDomain回收。

我意识到这种方法在某些情况下可能是一个非常糟糕的主意。这是为了允许自动生成的代码和视图的预览功能。负载将不成问题。我只是不想让每个请求都重新启动应用程序。

Str*_*ior 0

您可以将 .cshtml 文件放入不使用控制器和模型代码编译的单独项目中。由于 .cshtml 文件是单独即时编译的,因此可以避免在重新编译目标程序集时重新编译。然而,它也会带来自己的痛点。

另一种选择是使用dynamic, 或其他非强类型方法,并认识到这意味着您不能使用 lambda 表达式或其他强类型构造。大多数需要 lambda 的助手也有采用简单字符串的版本,并且在必要时仍然可以手动构造表达式树,尽管它需要更多代码。