evp*_*vpo 4 .net c# 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);
}
Run Code Online (Sandbox Code Playgroud)
如何防止 B 被加载?我希望 GetTypes() 像 B 不可用一样运行,并且只返回可用类型和 null 表示不可用,以便我可以执行
ex.Types.where(x=>x!=null);
我想在调用 Assembly.GetTypes() 时使用How to prevent ReflectionTypeLoadException 中的技巧
这样我只能得到不依赖于 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);
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我阻止了加载 B 并使用了独立于 B 的 A 类型。
| 归档时间: |
|
| 查看次数: |
3312 次 |
| 最近记录: |