在另一个程序集中创建 WebPart 子类时出错
Posted
技术标签:
【中文标题】在另一个程序集中创建 WebPart 子类时出错【英文标题】:Errors creating WebPart subclass in another assembly 【发布时间】:2010-09-09 07:25:44 【问题描述】:我正在尝试创建一个 WebPart 的子类,它将作为我们创建的任何 WebPart 的父类。如果我在同一个项目中创建一个空类,我可以像预期的那样继承它。但是,如果我尝试将它放在另一个程序集中——我已经能够引用和使用其中的类——我会收到以下错误:
无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。
其他可能相关的信息(我通常不是 SharePoint 开发人员):我编译 dll,从开发项目中引用它们,然后将它们复制到 SharePoint 实例的 /bin 目录中。程序集均已签名。我正在尝试使用 VS2008 的“部署”功能进行部署。
很遗憾,这似乎不是特定于 SharePoint 的错误,我不确定如何解决该问题。有没有人遇到过这种情况,您有什么建议吗?
【问题讨论】:
【参考方案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 即可解决。
【讨论】:
以上是关于在另一个程序集中创建 WebPart 子类时出错的主要内容,如果未能解决你的问题,请参考以下文章