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

C# 阻止Assembly.GetTypes()加载依赖项,c#,.net,reflection,C#,.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不可用一

我有程序集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不可用一样运行,并且只返回可用的类型,为notavailable返回null,以便执行
ex.Types.where(x=>x!=null)

我想用你的诡计

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

更新:

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

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

我通过从普通上下文程序集中获取相同的类型来解决这个问题

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

通过这种方式,我防止了从独立于B的A加载B和使用的类型。

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

呃,不从B中的任何类型继承吗?这使得阻止加载B变得毫无意义。我之所以要阻止加载B,是因为我不想锁定文件,以便在不重新启动应用程序的情况下对其进行编译。它在某些需要加载的场景中使用。因此,是否要更改在中定义的派生类的基类?有些语言支持这一点。它们属于动态语言类别,javascript、python和ruby。运行时错误,而不是编译时错误。此时未使用程序集A。它作为初始化的一部分加载。国际奥委会会议决议需要类型列表。当使用A中的类型时,将需要B。我明白,很明显,事情不是这样的。反射类型在很大程度上是使用类型,即使您还没有为它生成代码。代码对反射来说毫无意义。是的,它起作用了。它不返回引用类型,但您可以获得独立的类型,这正是我所需要的。谢谢