加载外部dll时出现reflectiontypeloadeexception
本文关键字:reflectiontypeloadeexception 外部 dll 加载 | 更新日期: 2023-09-27 18:13:55
假设我有一些项目的解决方案。在项目Proj1.BL
中,我有抽象类MyAbstractClass
,并且(强需求)我应该仅在其他解决方案中继承它。它们都将只包含一个类(例如DerivedClass : MyAbstractClass
),将从第一个解决方案(Proj1.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, Version=*.*.*.*, Culture=neutral, PublicKeyToken=null
中加载Proj1.BL.MyAbstractClass
类型。
但是我正在运行的代码是在Proj1.BL
.怎么了?
谢谢你的建议
嗯,答案比预期的要简单。当Proj1
程序集的"版本"值在每次重建后自动递增时,存在版本不匹配,但DLL期望找到在编译时指定的Proj1
程序集的"版本"。