我正在尝试创建 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 即可解决它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top