我想修改我的C#/ .NET应用程序在内部工作的方式。我已经使用Reflector挖掘了.NET框架,并找到了一个非常好的地方,我可以使用不同的方法实现。这是System.Windows.Forms命名空间中的内部类。您显然无法使用常规方法更改此类的代码,因此我认为可以在运行时通过反射替换其中的方法。我想完全替换我的应用程序的方法是:
public static WindowsFontQuality WindowsFontQualityFromTextRenderingHint(Graphics g)
:
internal sealed class System.Windows.Forms.Internal.WindowsFont
有没有办法加载该类型并在运行时替换该方法,而不影响当前正在运行或之后启动的任何其他应用程序?我试图用Type.GetType()
和类似的东西加载类型,但到目前为止失败了。
答案 0 :(得分:8)
你可能能够使用调试器API执行此操作 - 但这是一个非常非常糟糕的主意。
首先,安装调试器挂钩运行可能会慢一点 - 但更重要的是,篡改框架代码很容易导致意外行为。在所有可能的场景中,您是否确切知道如何使用此方法,甚至在您自己的应用程序中?
这也可能会产生不良的法律后果,尽管你应该向律师咨询。
我个人会放弃这种思路,并尝试以不同的方式来完成你想要做的任何事情。
答案 1 :(得分:3)
编辑:如果您有兴趣编辑核心框架代码,请随意尝试使用Mono,但如果它们是特定于应用程序的,则不要期望重新分发您的修改。 :)
答案 2 :(得分:1)
我真的认为,这不是个好主意。但是如果你真的需要它,你可以使用Mono Cecil并更改程序集内容。然后,您需要为Redirecting Assembly Versions设置配置文件。
最后但并非最不重要的是,你的进步将是违法的。