【问题标题】:Reference dynamic assembly from Razor View从 Razor View 引用动态程序集
【发布时间】:2014-11-05 18:28:50
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但这不是我要避免的视图的重新编译。我想防止 MVC 应用程序的 AppDomain 被回收。发生这种情况是因为我必须将动态程序集写入 bin 文件夹,以便视图能够引用它的类型。
    • @CuriousLayman:所以视图不能在运行时使用不在 web 项目的 bin 文件夹中的类型?我想这是有道理的。你每天学习新的东西。 :-)
    • 最后我们决定使用动态视图模型来实现预览功能。我试图避免它,但似乎没有一种可接受的方法来实现它。
    • 是的,很抱歉。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多