【问题标题】:Possible to override the access restrictions on .Net assemblies?可以覆盖对.Net 程序集的访问限制吗?
【发布时间】:2012-10-10 06:32:09
【问题描述】:

我需要为 Metro 编译一个程序集,并检查一些编译器生成的代码是否可以在常规控制台程序中运行(这应该很容易)。我的问题是编译器生成的代码将所有感兴趣的东西作为内部和/或私有(类和方法)发出。

有没有指定我的控制台程序就像一个超级朋友之类的?此外,丑陋的 hack 是可以接受的,这仅用于集成测试。这样做的最佳方法是什么?我想到的唯一两种方法是大量反射或反汇编为 IL,使用一些非常复杂的正则表达式并用公共替换所有私有/内部成员。

【问题讨论】:

    标签: .net reflection assemblies access-modifiers il


    【解决方案1】:

    有没有指定我的控制台程序就像一个超级朋友什么的?

    您可以使用InternalsVisibleToAttribute - 将其应用于“目标”程序集,引用控制台应用程序。这不会让您访问 private 成员,但如果 internal 访问足够好应该没问题。

    唯一的直接警告是我不确定该属性是否适用于 Metro 程序集...但它当然值得一试。

    【讨论】:

    • 那么只有通过反射访问私有成员的方法吗?
    • 嘿,实际上最终尝试了这一点,并受到“项目针对 .NetFramwork 而文件引用针对.NETCore。这不是受支持的方案”的欢迎我想我会很开心剥离这些功能出或与 Mono.Cecil 的东西
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-02-18
    • 2015-01-28
    相关资源
    最近更新 更多