首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从未加载的程序集中获取自定义属性

如何从未加载的程序集中获取自定义属性
EN

Stack Overflow用户
提问于 2009-09-22 11:42:13
回答 6查看 11.4K关注 0票数 10

我们都知道,可以使用GetCustomAttributes方法查询程序集的属性。我想用它来标识我的应用程序的扩展模块。但是,为了避免加载每个程序集,我更喜欢防御性方法:

使用ModuleAttribute?)获取有关程序集的更多详细信息的

  1. (它是我的Assembly.ReflectionOnlyLoadFrom吗?)

如果找到了Assembly.LoadFrom的

  1. ,我将最终使用ModuleAttribute加载它

不幸的是,似乎无法从程序集获取属性,该程序集加载到仅反射的上下文中:

代码语言:javascript
运行
复制
myAssembly.GetCustomAttributes(typeof(ModuleAttribute), false)

使用InvalidOperationException失败

通过ReflectionOnlyGetType加载的类型的自定义属性是非法的

代码语言:javascript
运行
复制
CustomAttributeData.GetCustomAttributes(myAssembly)

由于未加载依赖程序集而导致ReflectionTypeLoadException失败。

那么,如何在不使用

通过调用Assembly.LoadFrom

  • the来污染我的应用程序域的
  1. 需要加载所有引用的assemblies
  2. the需要单独的应用程序域(给了它一次短暂的尝试,闻起来像更多的皮塔)
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-23 08:00:18

在检查了所有答案并进行了更多的研究之后,似乎根本没有办法做我想做的事情:在将程序集加载到应用程序域中之前,先检查程序集是否是一个有效的扩展模块。

要么我必须将应该被检查的程序集加载到另一个应用程序域中,然后在那里检查它,当它成功时再次将它加载到我当前的应用程序域中,或者我需要将程序集的元数据存储在程序集本身之外,并信任这个元数据。由于体系结构的限制,选项一是不可能的,选项二只是转移问题,但不能解决问题。

最好的选择可能是使用托管扩展框架,但不幸的是,在当前的设置中,这并不容易。

最后,我相信模块目录中没有什么“坏”,并加载所有内容(有些检查不超过最大文件大小,并且尚未加载)。

不过,谢谢你的意见。

票数 4
EN

Stack Overflow用户

发布于 2011-04-06 13:39:07

可以加载(仅反射)依赖项的程序集。

AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += (s, e) => Assembly.ReflectionOnlyLoad(e.Name);

将修复加载时的失败,假设它们都位于同一个文件夹中。

票数 5
EN

Stack Overflow用户

发布于 2017-03-01 19:57:51

这是一个很老的问题,但这在.NET 2.0之后就已经成为可能。问题是,加载到仅反射加载上下文中的所有内容都实现了,因此您不能意外地触发将程序集加载到当前AppDomain中。反映在程序集中定义的自定义属性类型就是其中之一。

您需要使用CustomAttributeData来查看这些自定义属性。

代码语言:javascript
运行
复制
var assy = Assembly.ReflectionOnlyLoadFrom("MuhPlugin.dll");
// gets assembly-level attributes, but you get the idea
var attrs = CustomAttributeData.GetCustomAttributes(assy);

CustomAttributeData实例包含有关属性的信息,包括其类型、构造函数参数和命名参数。请注意,对象图中的类型仅限于反射,因此,如果您试图对它们执行触发加载程序集的操作,则会引发熟悉的异常。

可以使用有关元数据的元数据来确定反射的程序集是否符合任何您的需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1459565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档