1

我正在尝试创建一个 WebPart 的子类,它将作为我们创建的任何 WebPart 的父类。如果我在同一个项目中创建一个空类,我可以像预期的那样继承它。但是,如果我尝试将它放在另一个程序集中——我已经能够引用和使用其中的类——我会收到以下错误:

无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。

其他可能相关的信息(我通常不是 SharePoint 开发人员):我编译 dll,从 dev 项目中引用它们,然后将它们复制到 SharePoint 实例的 /bin 目录中。程序集均已签名。我正在尝试使用 VS2008 的“部署”功能进行部署。

不幸的是,这似乎不是特定于 SharePoint 的错误,我不确定如何解决该问题。有没有人经历过这种情况,你有什么建议吗?

4

1 回答 1

1

好的,我发现了问题。打包任务出于某种原因使用反射。当它发现你的类继承自另一个域中的类时,它会尝试使用反射加载它。但是,反射不执行绑定策略,因此不会加载域。

打包程序的作者可以通过添加以下代码来解决这个问题:

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,它就能解决它们。

于 2008-09-16T05:36:36.467 回答