【发布时间】:2011-07-27 10:54:07
【问题描述】:
我正在使用 VirtualPathProvider 来包含在编译时不可用的用户控件。 除了对实际包含控件的 dll 的引用之外,一切都正常工作。
调用有控件的页面时找不到控件类型,除非我把dll放到bin文件夹中。
错误: 解析器错误 说明:解析服务此请求所需的资源时出错。请查看以下特定的解析错误详细信息并适当修改您的源文件。
解析器错误消息:无法加载类型 'App.Modules.ModuleA.Controls.Entity1Item'。
来源错误:
第 1 行:
我尝试处理所有重要的 AppDomain 事件(AssemblyResolve、TypeResolve 和 ReflectionOnlyAssemblyResolve),但我的类型没有调用。
我在 TypeResolve 文档中看到,只要执行 Type.GetType 并且找不到类型,就会调用它。似乎 ASCX 在需要它的类型时没有触发事件......为什么?
谢谢! 亚历克斯
【问题讨论】:
-
我遇到了同样的问题 - 当我跟踪 AppDomain.GetAssemblies() 它列出了包含该类型的程序集,因此我不确定它是否真的需要触发 TypeResolve 事件,但是在加载时UserControl 会抛出“无法加载类型...”异常。
-
您写道“我正在使用 VirtualPathProvider 来包含在编译时不可用的用户控件”。请注意,编译时从不需要用户控件(ascx 文件),并且始终在运行时处理。因此,您不需要 VPP。您可能需要澄清您要做什么。
-
我不确定原始提问者的项目,但我正在从程序集(预编译站点)中检索 ascx 文件(嵌入资源),因此使用了 VPP。
-
另外,你能澄清一下 Entity1Item 类型是在哪里定义的吗?它在哪个程序集中,该程序集在哪里?
-
Lukiffer:是的,如果您的 ascx 不在文件系统上,VPP 就有意义。但是这里的问题似乎更多地与包含基类的程序集有关,而不是与 ascx 本身有关。
标签: c# asp.net reflection appdomain virtualpathprovider