【问题标题】:ASP.Net MVC Views using a model type that is loaded by MEF result in JIT Compile error in the View builder使用 MEF 加载的模型类型的 ASP.Net MVC 视图会导致视图生成器中出现 JIT 编译错误
【发布时间】:2015-09-11 09:08:21
【问题描述】:

这被命名为类似于以下问题:ASP.NET MVC: Views using a model type that is loaded by MEF can't be found by the view engine

这与我遇到的问题非常相似。 我正在使用 .NetFx 4.6、MEF 2 和 MVC 4。我有一个单独的类项目,其中包含 Mvc 视图、Views 文件夹中的相关配置以及视图中引用的导出模型。

View 和相关配置以及生成的 dll 被复制到 MVC Host 项目中的 Plugins 文件夹中,除了在运行时编译 View 时,我收到以下错误 CS0234: The type or namespace name 'Central' does not exist in the namespace 'MyCompany' (are you missing an assembly reference?)

当我删除视图中的模型引用时,它会正确加载视图。

当我将 dll 放在 Host 应用程序的 bin 文件夹中时,它运行良好。

只有将dll放在Plugins文件夹下才会出现此异常。

我尝试在 Global.asax Application_Start 的开头使用已弃用的AppDomain.CurrentDomain.AppendPrivatePath(Path.Combine(HttpRuntime.AppDomainAppPath, "Plugins"));,但这似乎没有帮助。

引用的问题有 @BradWilson 和 @MatthewAbbott 的 cmets,它们都引用了 bin 文件夹中 dll 的位置。

谁能告诉我如何做到这一点,以便导入的 dll 可以保留在插件文件夹中,而不必将其放入 bin 文件夹并导致 MVC 主机重置?

【问题讨论】:

  • 查看以下链接:shazwazza.com/post/… 它解决了模型类型位于 bin 外部的强类型视图的问题。
  • 感谢@Ilija Dimov,这非常有帮助。我现在可以根据需要从 Plugins 文件夹加载程序集。正如帖子上的 cmets 指出的那样,这仍然需要重新启动应用程序池,但在我的情况下,虽然这本来是理想的,但这仍然是一个可行的解决方案,因为这意味着 bin 文件夹没有受到污染。非常感谢。我会写下这个问题的答案,并给你功劳。

标签: c# asp.net-mvc-4 razor mef


【解决方案1】:

最后我使用@Ilija Dimov的评论中引用的解决方案,发现here

感谢@Ilija Dimov

【讨论】:

    【解决方案2】:

    我想我应该分享我在处理 MEF 时强类型视图问题的经验。 如果创建插件,最好不要使用它们。使用其他前端工具(如 knockout js)对视图进行数据绑定,这意味着您根本不会使用剃须刀代码,但它仍然为您提供了一个很好的框架来构建插件。要进一步补充您的插件,请使用 ko 组件,它可以同时促进模块化和可重用性。

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多