加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 动态加载的程序集中的强类型Razor视图不会在运行

发布时间:2020-12-16 09:59:52 所属栏目:asp.Net 来源:网络整理
导读:我在一个动态加载MEF的程序集中有一个MVC3区域. 如果我使用具有强类型视图的Webforms视图引擎,一切正常. 如果我使用带有动态模型的Razor视图引擎,它也可以正常工作. 但是如果我使用强类型Razor视图,则视图编译在运行时会失败. 问题是动态加载的程序集不在传
我在一个动态加载MEF的程序集中有一个MVC3区域.
如果我使用具有强类型视图的Webforms视图引擎,一切正常.
如果我使用带有动态模型的Razor视图引擎,它也可以正常工作.

但是如果我使用强类型Razor视图,则视图编译在运行时会失败.

问题是动态加载的程序集不在传递给C#编译器的引用程序集列表中.

生成的C#代码如下所示:

namespace ASP {
    using System;
    /* Other namespaces */
    public class _Page_MyApp_Views_Home_Index_cshtml
        : System.Web.Mvc.WebViewPage<MyApp.ViewModels.Search.IndexViewModel> {
    /* Generated code */
    }
}

这是错误消息:

Compiler Error Message: CS0246: The type or namespace name 'MyApp' could not be found (are you missing a using directive or an assembly reference?)

您是否知道为什么这适用于Webforms视图引擎但不适用于Razor?
有没有办法告诉编译器使用我的动态加载程序集进行编译?

谢谢

解决方法

你从哪里装你的装配?通常(如我的博客 here所述)如果您没有从/ bin目录加载程序集,则需要确保程序集的路径是可发现的.我以前这样做的方法是使用AppDomain.CurrentDomain.AppendPrivatePath(path).虽然这是一种弃用的方法,但您不是自己构建AppDomain(IIS工作进程在托管您的应用程序时执行此操作),您仍然可以使用它来更新当前域以在此处搜索.现在,当一个程序集被解析时,如果它不是GAC,AppDomain将搜索它的程序集的私有路径.

至于为什么它适用于WebForms而不是Razor,我们需要更多地了解您的项目架构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读