我有以下代码,它包含了我的项目所引用的所有aseemblies以及它们使用的所有引用
var types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes())
.Where(t => t.IsClass && !t.IsAbstract && (typeof (MyType).IsAssignableFrom(t)));
foreach (var type in types.Where(type => typeof (MyType).IsAssignableFrom(type)))
{... do something ...}
在我的开发框中,这可以正常工作,在其他环境中会导致异常
System.Reflection.ReflectionTypeLoadException:无法加载一个或 更多请求的类型。检索LoaderExceptions属性 了解更多信息。
为什么抛出这个异常? 是否有可能重构我的代码以使异常被忽略?
答案 0 :(得分:3)
我有完全相同的问题,但是大会它遇到的问题我并不在乎。
我离开了这里(在当地工作):
Type t = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(a => a.FullName == clientEx.ExceptionType)
.FirstOrDefault();
对此:
Type t = null;
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
try
{
foreach (Type type in a.GetTypes())
{
if (type.FullName == clientEx.ExceptionType)
{
t = type;
break;
}
}
if (t != null)
break;
}
catch (Exception) { }
}
答案 1 :(得分:0)
就我而言,我需要从当前程序集中加载实现类型,因此这对我有用。
var types = (typeof(ClassinAssembly).Assembly)
.GetTypes()
.Where(x => typeof(IMyInterface).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract)
.ToList();
foreach (var t in types)
{
.....
}