如何重写现有 DLL 中的 C# 方法
本文关键字:DLL 中的 方法 何重写 重写 | 更新日期: 2023-09-27 18:33:20
我有一个实例,我正在使用其他人的库,作为DLL导入。我只想更改该类中的两个私有函数。我真的很喜欢在 DLL 外部执行此操作,因此当其他人发布新 DLL 时,我可以快速更新我的 DLL,而不必更改源代码并构建自己的 DLL。
可以这样做吗?我可以以某种方式从 DLL 外部覆盖 C# dll 中的一些私有函数吗?
想我真的很喜欢在 DLL 外部执行此操作,所以当其他 人们发布一个新的DLL,我可以快速更新我的DLL
一想。假设您成功拦截/覆盖了它们的私有函数。当下一个版本删除这些功能或更改其行为时会发生什么?
成员通常是私人的,这是有原因的。
有效的方法是将外部程序集包装为控制/抽象行为,或重写为继承而设计的公共/受保护成员。
通过反思,召集私人成员很容易。修改它们以便其调用方使用新的实现更为复杂。
并且不必更改源代码并构建我自己的 DLL。
如果您真的需要这样做,更改源可能是最直接的方法。 您还可以查看可能适合此任务的 IL 编织。
更好的方法是与作者合作,使库在您需要的区域中更具可扩展性。
* 这假定您具有对源代码的合法访问权限或被允许反编译程序集。这可能会违反许可证中的逆向工程条款,使维护合同无效等。我不是律师。
我认为你可以使用TypeBuilder.DefineMethodOverride。有关详细信息,请参阅此问题 有没有办法用反射"覆盖"方法?
如果这不起作用,您可以尝试也使用反射构建运行时代理类,但将要重写的方法的调用替换为实现。这当然是一点点巫毒教。代码检测执行类似操作 - 将自定义代码注入到方法中。事实上,这就是我建议研究的——仪器是如何工作的。