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

加载外部dll时出现ReflectionTypeLoadException

  •  0
  • user5147454  · 技术社区  · 9 年前

    想象一下我有一些项目的解决方案。在项目中 Proj1.BL 我有抽象类 MyAbstractClass ,和( 强烈的要求 )我只能从另一个解决方案中继承。所有这些都将只包含一个类(例如。 DerivedClass : MyAbstractClass ),将引用第一个解决方案中的相应项目( 项目1.BL , Proj1.DataModel 等),并将编译为DLL(类库)。总之,这些DLL( 另一个强烈要求 )将存储在 $(OutDir of first solution)\Externals .

    我的问题是:如何在第一个解决方案中正确加载这些程序集?我试过这样的方法:

    public static Type LoadType(string fileName)
    {
        if (fileName == null) throw new ArgumentNullException("fileName");
    
        fileName = Path.Combine("Externals", fileName);
    
        if (!File.Exists(fileName)) throw new ApplicationException("File does not exist.");
    
        return
            Assembly.LoadFrom(fileName)
                    .GetTypes()
                    .SingleOrDefault(_ => _.IsSubclassOf(typeof (MyAbstractClass)));
    }
    

    但我还在继续

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

    LoaderException 是关于CLR无法加载类型 Proj1.BL.MyAbstractClass 从…起 Proj1.BL, Version=*.*.*.*, Culture=neutral, PublicKeyToken=null .

    但我正在运行的代码 项目1.BL . 发生了什么?

    谢谢你的建议。

    1 回复  |  直到 9 年前
        1
  •  0
  •   user5147454 user5147454    9 年前

    呃,答案比预期的容易。出现版本不匹配时 Proj1 程序集的“版本”值在每次重新生成后自动递增,但DLL应找到 项目1 编译时指定的程序集“版本”。