代码之家  ›  专栏  ›  技术社区  ›  tsimon

在其他程序集中创建Web部件子类时出错

  •  1
  • tsimon  · 技术社区  · 16 年前

    我正在尝试创建WebPart的子类,它将作为我们创建的任何Web部件的父级。如果我在同一个项目中创建一个空类,我就能够像人们所期望的那样从中继承。但是,如果我尝试将它放在另一个程序集中(我已经能够引用并使用其中的类),我会得到以下错误:

    无法加载一个或多个请求的类型。有关详细信息,请检索LoaderExceptions属性。

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

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   tsimon    16 年前

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

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

    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中,它就能够解决这些问题。