在另一个程序集中创建WebPart子类时出错
时间:2020-03-05 18:55:05 来源:igfitidea点击:
我正在尝试创建WebPart的子类,该子类将充当我们创建的任何WebPart的父类。如果在同一项目中创建一个空类,则可以像预期的那样从中继承。但是,如果我尝试将其放在另一个程序集中-我已经能够引用该程序集并使用-中的类,则会收到以下错误:
无法加载一种或者多种请求的类型。检索LoaderExceptions属性以获取更多信息。
其他可能相关的信息(我通常不是SharePoint开发人员):我编译dll,从dev项目中引用它们,然后将它们复制到SharePoint实例的/ bin目录中。程序集均已签名。我正在尝试使用VS2008的"部署"功能进行部署。
不幸的是,这似乎不是特定于SharePoint的错误,我不确定如何解决该问题。有没有人遇到过这种情况,我们有什么建议吗?
解决方案
回答
好的,我发现了问题。打包任务出于某种原因而使用了反射。当发现类继承自另一个域中的类时,它将尝试使用反射来加载它。但是,反射不执行绑定策略,因此不会加载域。
包装程序的作者可以通过添加以下代码来解决此问题:
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve); Assembly a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(filename); static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) { return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name); }
但是,如果我们需要项目的解决方案,只需将程序集添加到GAC中,它将能够解析它们。