我使用VirtualPathProvider来包含在编译时不可用的用户控件。除了对实际包含控件的dll的引用之外,一切正常。
当调用具有控件的页面时,它无法找到控件类型,除非我将dll放在bin文件夹中。
错误:解析器错误描述:在解析服务此请求所需的资源时发生错误。请查看以下具体的解析错误细节,并适当修改源文件。
解析器错误消息:无法加载类型"App.Modules.ModuleA.Controls.Entity1Item"。
源错误:第一行:<%@ Control Language=" c# " AutoEventWireup="true"后台代码= " Entity1Item.ascx.cs "继承= " App.Modules.ModuleA.Controls。Entity1Item " %>
我试图处理所有重要的AppDomain事件(AssemblyResolve, typerresolve和ReflectionOnlyAssemblyResolve),但没有一个被调用为我的类型。
我在typerresolve文档中看到,当一个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构建时,它会在临时ASP中构建一个新类。. NET Files文件夹。添加到文件夹中的任何类都会自动对应用程序可用。"对我来说,它看起来像是你需要映射system。web。compile。usercontrolbuildprovider来在运行时构建你的usercontrols而不是解析类型,但现在我不知道怎么做。希望对大家有用