我在程序集中有一个 MVC3 区域动态加载与MEF。
如果我使用具有强类型视图的 Webforms 视图引擎,一切都会正常工作。
如果我将 Razor 视图引擎与dynamic
模型,效果也很好。
但如果我使用强类型 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 吗?
有没有办法告诉编译器使用我的动态加载的程序集进行编译?
Thanks
当强类型视图的编译由于无法找到类型而失败时,我遇到了类似的问题。
一种解决方案是创建继承自 RazorBuildProvider 的自定义构建提供程序:
public class CustomRazorBuildProvider : RazorBuildProvider
{
public override void GenerateCode(System.Web.Compilation.AssemblyBuilder assemblyBuilder)
{
Assembly a = Assembly.LoadFrom([PATH_TO_YOUR_ASSEMBLY]);
assemblyBuilder.AddAssemblyReference(a);
base.GenerateCode(assemblyBuilder);
}
}
然后你需要在 web.config 中注册这个自定义构建提供程序:
<compilation debug="true" targetFramework="4.0">
<assemblies>
...
</assemblies>
<buildProviders>
<remove extension=".cshtml" />
<add extension=".cshtml" type="YouAssembly.CustomRazorBuildProvider, YourAssembly"/>
</buildProviders>
</compilation>
它可以工作,但坏处是每次编译视图时都需要引用程序集。
Here https://stackoverflow.com/questions/8285474/mef-and-mvc-3-how-to-load-embedded-views-dynamically-from-mef-container,我发布了一个更好的解决方案的问题(例如类似于 AppDomain.CurrentDomain.AddPrivatePath),您只需指定一次私有路径,并且它将在目录级别,而不是程序集级别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)