在另一个程序集中创建 WebPart 子类时出错
-
09-06-2019 - |
题
我正在尝试创建 WebPart 的子类,它将充当我们创建的任何 WebPart 的父类。如果我在同一个项目中创建一个空类,我就可以像人们所期望的那样继承它。但是,如果我尝试将它放在另一个程序集中(我能够引用和使用其中的类),我会收到以下错误:
无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。
其他可能相关的信息(我通常不是 SharePoint 开发人员):我编译这些 dll,从开发项目引用它们,然后将它们复制到 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 即可解决它们。
不隶属于 StackOverflow