关于sharepoint:在另一个程序集中创建WebPart子类时出错

关于sharepoint:在另一个程序集中创建WebPart子类时出错

Errors creating WebPart subclass in another assembly

我正在尝试创建WebPart的子类,该子类将充当我们创建的任何WebPart的父类。 如果在同一项目中创建一个空类,则可以像预期的那样从中继承。 但是,如果我尝试将其放置在另一个程序集中(我已经能够引用该程序集并使用其中的类),则会出现以下错误:

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

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

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


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

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

1
2
3
4
5
6
7
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,它将能够解决它们。


推荐阅读