【发布时间】:2010-11-30 09:09:49
【问题描述】:
我们都知道可以使用 GetCustomAttributes 方法来查询程序集的属性。我想用它来识别我的应用程序的扩展模块。但是,为了避免加载每个程序集,我更喜欢防御性方法:
-
使用 Assembly.ReflectionOnlyLoadFrom 获取有关程序集的更多详细信息(它是我的 ModuleAttribute 吗?)
-
如果找到 ModuleAttribute,我最终会使用 Assembly.LoadFrom 加载它
不幸的是,似乎没有办法从程序集中获取属性,即加载到仅反射上下文中:
myAssembly.GetCustomAttributes(typeof(ModuleAttribute), false)
以InvalidOperationException 失败
反射通过 ReflectionOnlyGetType 加载的 Type 的自定义属性是非法的
和
CustomAttributeData.GetCustomAttributes(myAssembly)
由于未加载依赖程序集,ReflectionTypeLoadException 失败。
那么如何在没有的情况下获取属性
- 通过调用 Assembly.LoadFrom 用无用(可能有害)的类型污染我的应用程序域
- 需要加载所有引用的程序集
- 需要单独的应用程序域(试一试,闻起来更像 PITA)
?
【问题讨论】:
标签: c# plugins assemblies attributes