ASP.Net MVC 视图使用由 MEF 加载的模型类型导致视图构建器中的 JIT 编译错误

ASP.Net MVC Views using a model type that is loaded by MEF result in JIT Compile error in the View builder

这被命名为类似于以下问题: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。我有一个单独的 class 项目,其中包含 Mvc 视图、Views 文件夹中的相关配置和视图中引用的导出模型。

视图和相关配置以及生成的 dll 被复制到 MVC 主机项目中的插件文件夹中,并且所有工作正常,除了在运行时编译视图时出现以下错误 CS0234: The type or namespace name 'Central' does not exist in the namespace 'MyCompany' (are you missing an assembly reference?)

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

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

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

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

引用的问题有@BradWilson 和@MatthewAbbott 的评论,他们都提到了 dll 在 bin 文件夹中的位置。

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

最后我使用了@Ilija Dimov's comment and found here中引用的解决方案。

感谢@Ilija Dimov

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