gpt4 book ai didi

c# - 如何从未(真正)加载的程序集中获取自定义属性

转载 作者:太空狗 更新时间:2023-10-29 21:07:29 27 4
gpt4 key购买 nike

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

  1. 使用 Assembly.ReflectionOnlyLoadFrom 获取有关程序集的更多详细信息(它是我的 ModuleAttribute 吗?)

  2. 如果找到 ModuleAttribute,我将最终使用 Assembly.LoadFrom 加载它

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

myAssembly.GetCustomAttributes(typeof(ModuleAttribute), false)

InvalidOperationException 而失败

It is illegal to reflect on the custom attributes of a Type loaded via ReflectionOnlyGetType

CustomAttributeData.GetCustomAttributes(myAssembly)

由于未加载依赖程序集而失败并返回 ReflectionTypeLoadException

那么如何在没有的情况下获取属性

  1. 通过调用 Assembly.LoadFrom 用无用(可能有害)类型污染我的应用程序域
  2. 需要加载所有引用的程序集
  3. 需要单独的应用程序域(试了一下,闻起来更像 PITA)

?

最佳答案

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


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

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

关于c# - 如何从未(真正)加载的程序集中获取自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1459565/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com