- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我通过 Assembly.Load 加载程序集,我可以迭代其类型,通过 typef(...).IsAssignableFrom 查找特定类型,并通过 GetField 从类型中获取字段信息。
当我加载仅用于反射的程序集时,我尝试了 ReflectionOnlyLoad 而不是加载。第一个问题是 IsAssignableFrom 总是报告错误,但 GetInterface 完成了这项工作。我没有找到解决方案的第二个问题是 GetField 总是返回 null。
最佳答案
我遇到了同样的问题,IsAssignableFrom 总是返回 false,但做了一些实验并找到了解决方法。关键是要确保比较中的两种类型都在 ReflectionlyOnly 上下文中。
换句话说,这通常不起作用:
var types = Assembly.ReflectionOnlyLoad(assemblyName).GetExportedTypes();
foreach( var t in types )
{
bool check = SomeBaseType.IsAssignableFrom(t);
}
这似乎总是给出 check=false
,但我认为这是因为 t
处于仅反射上下文中,但 SomeBaseType
不是.
我发现的解决方法是在仅反射上下文中加载基类的程序集,然后在该上下文中查找等效的基类型。然后我们可以在两种类型都是仅反射的情况下进行比较:
var baseAssembly = Assembly.ReflectionOnlyLoad(typeof(SomeBaseType).Assembly.FullName);
var baseTypes = baseAssembly.GetExportedTypes();
var reflectionOnlyBaseType = Array.Find(baseTypes,(t)=>(t.FullName==typeof(SomeBaseType).FullName));
var types = Assembly.ReflectionOnlyLoad(assemblyName).GetExportedTypes();
foreach( var t in types )
{
bool check = reflectionOnlyBaseType.IsAssignableFrom(t);
}
这似乎给出了预期的结果。可能有一种更有效的方法可以在不重新加载程序集的情况下访问仅反射上下文(我不是 C# 专家),但这是我能找到的最简单的方法。
相同的方法似乎适用于 IsSubclassOf 和 IsAssignableFrom。
关于c# - ReflectionOnlyLoad 和 GetField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008097/
如果我通过 Assembly.Load 加载程序集,我可以迭代其类型,通过 typef(...).IsAssignableFrom 查找特定类型,并通过 GetField 从类型中获取字段信息。 当我
我正在开发一个简单的类浏览器对话框,允许用户打开一个程序集并从中选择一个静态方法。但是,在某些情况下程序集的依赖项会丢失。 因为我只需要方法名而不是它的完整原型(prototype),有什么方法可以绕
我的目标: 我们允许将我们的产品与第三方组件(库)集成,这些组件由于许可而未作为我们产品的一部分安装。目前,我们只想加载与第三方组件相关的功能,前提是这些组件安装在客户端的机器上。 当前解决方案: 我
我正在尝试通过连接到 AppDomain.AssemblyResolve 和 AppDomain.ReflectionOnlyAssemblyResolve 事件来加载一些模块。当我让前者工作时,我在
我试图了解 Assembly.Load 和 Assembly.ReflectionOnlyLoad 之间的区别。 在下面的代码中,我试图在给定程序集中查找从给定接口(interface)继承的所有对象
Assembly.ReflectionOnlyLoad 已在 .NET 6 中弃用。是否有替代方案? 我想要实现的是在应用程序路径中找到具有特定自定义程序集属性的程序集并加载它们。我可以搜索所有程序集
我是一名优秀的程序员,十分优秀!