我搜索了一种通过反射访问私有成员的替代方法,看来我找到了一个。
剩下的问题是:
在程序设计工作和计算资源方面,使用反射或一些简化反射的工具以开销为代价。特别是如果您需要使用私有类型的实例,它将变得非常麻烦。
另外,您失去了代码完成的优势和IDE的其他功能。甚至简单的错字也可能导致错误,因为您使用字符串进行反射。
采用原始程序集并将私人/非公共成员更改为公共成员(通过IL编辑器,反编译器或Cecil)。
将此修改后的程序集添加到您的引用中,然后就可以轻松进行开发,因为编译器认为您可以访问它们(对于此版本,您可以访问)。
但是,如果将编译后的程序集与原始程序集结合使用,则这仅适用于类型,因为如果访问其他私有成员,则在运行时会遇到访问冲突异常。
除 (如果启用了“允许不安全的代码” ),则似乎不再在乎访问修饰符。
我没有找到有关此功能的任何信息(?),但是此选项和代码中相关的不安全关键字通常主要用于指针。
对我来说,它起作用了,但是我不知道在其他情况下(例如,不同的操作系统和CLR版本)这种行为是否一致。
另外,如果还有其他原因为什么不使用此技术。
我编写了一个工具来创建一个程序集副本,其中所有成员都是公共的(类型,方法,字段,属性的getter和setter)。
https://github.com/CabbageCrow/AssemblyPublicizer
使用简单,在Windows上甚至可以将程序集拖放到exe上。