ASP.net UserControl和AppDomain TypeResolve

我正在使用VirtualPathProvider来包含编译时不可用的用户控件。 除了对实际包含控件的dll的引用外,一切都正常工作。

当调用具有控件的页面时,除非将dll放在bin文件夹中,否则无法找到控件类型。

错误:分析程序错误说明:解析为此请求提供服务所需的资源时发生错误。 请查看以下特定的解析错误详细信息并相应地修改源文件。

分析器错误消息:无法加载类型“App.Modules.ModuleA.Controls.Entity1Item”。

来源错误:

第1行:

我试图处理所有重要的AppDomain事件(AssemblyResolve,TypeResolve和ReflectionOnlyAssemblyResolve),但没有为我的类型调用。

我在TypeResolve文档中看到,只要执行Type.GetType并且找不到类型,就会调用它。 看起来像ASCX在需要它的类型时没有触发事件……为什么?

谢谢! 亚历克斯

AssemblyResolve事件应解决此问题,但您需要在类型名称中指定程序集名称,例如

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Entity1Item.ascx.cs" Inherits="App.Modules.ModuleA.Controls.Entity1Item, YourDynamicAssemblyName" %> 

然后,AssemblyResolve事件将触发,要求您加载“YourDynamicAssemblyName”。

哪些内容可以虚拟化? 可浏览类型(如ASPX,母版页,ASCX和主题)是唯一可以虚拟化的项目…要虚拟化非默认可浏览内容,您需要映射BuildProvider类。

“当BuildProvider构建时,它会在Temporary ASP.NET Files文件夹中构建一个新类。添加到该文件夹​​的任何类都将自动提供给您的应用程序。” 所以对我来说,看起来你需要映射System.Web.Compilation.UserControlBuildProvider来在运行时构建你的用户控件而不是解析类型,但是现在我不知道该怎么做。 希望它仍然有用