阻止Assembly.GetTypes()加载依赖项

时间:2012-02-07 00:31:40

标签: .net reflection

我有程序集A引用程序集B.它们位于同一目录中。

Type[] types = null;
try
{
  Assembly a = Assembly.Load("A.dll");
  types = a.GetTypes(); // loads B implicitly.
}
catch(ReflectionTypeLoadException ex)
{
  types = ex.Types.Where(x=>x!=null);
}

如何阻止B加载?我希望GetTypes()运行,好像B不可用,只返回可用的类型,并且null不可用,所以我可以执行 ex.Types.where(x=>x!=null);

我想使用How to prevent ReflectionTypeLoadException when calling Assembly.GetTypes()

中的技巧

这样我只能获得不依赖于B的类型并使用它们。

更新

我在反射和正常情境中加载了A.我使用反射上下文A来调用GetTypes()。从反射上下文程序集中获取类型后,我遇到了另一个问题。当我调用Type.GetCustomAttributes()时,我收到了以下异常

  

反映通过类型加载的自定义属性是非法的   ReflectionOnlyGetType(参见Assembly.ReflectionOnly) - 使用   改为CustomAttributeData。

我通过从普通的上下文汇编中获取相同的类型来解决它。

//... code omited for brevity
Type reflectionType = reflectionAssembly.GetTypes()[0];
//... code omited for brevity
Type goodType = normalAssembly.GetType(reflectionType.FullName);

这样我就防止从A独立于B加载B和使用的类型。

1 个答案:

答案 0 :(得分:2)

查看使用Assembly.ReflectionOnlyLoad()看起来不加载依赖项。不确定它是否会返回引用该依赖关系的类型,因为我之前没有尝试过。

相关问题