You need to enable JavaScript to run this app. .NET静态框架方法重定向/劫持(修改返回值)实现方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

.NET静态框架方法重定向/劫持(修改返回值)实现方案咨询

解决方案

方案1:调整AppDomain执行逻辑(无侵入优先推荐)

该方案无需修改系统方法或第三方代码,完全符合.NET运行时规范:

  • 不要在主程序的上下文中手动反射调用第三方程序集的EntryPoint,改用AppDomain.ExecuteAssembly方法直接在新建的AppDomain中执行第三方程序集,此时Assembly.GetExecutingAssembly天然返回第三方程序集本身
  • 若需要插入自定义前置执行逻辑,可以将逻辑封装为独立程序集,和第三方程序集一同加载到新建AppDomain中,再通过AppDomain.CreateInstance在新AppDomain的上下文中触发第三方入口调用,保证执行上下文属于第三方程序集

方案2:运行时Hook系统方法

你之前用的运行时方法替换对Assembly.GetExecutingAssembly无效,是因为该方法属于CLR内部特殊处理的Runtime调用,普通的方法地址替换逻辑无法命中,推荐用成熟的Hook库实现:

  • 直接使用Harmony库,它已经封装了.NET各版本系统方法的Hook兼容逻辑,只需实现自定义补丁方法:
// 自定义补丁方法,返回你预期的第三方程序集实例即可
public static Assembly GetExecutingAssemblyPatch()
{
    return 目标第三方程序集实例;
}
  • 仅在新建的独立AppDomain中初始化Hook逻辑,避免影响主程序的正常运行

方案3:静态重写第三方程序集

如果允许修改第三方程序集,可以选择该方案,完全没有运行时兼容性问题:

  • 用Mono.Cecil或dnSpy工具打开第三方程序集,全局替换所有调用Assembly.GetExecutingAssembly的IL指令,改为直接返回目标程序集的代码
  • 保存修改后的程序集再加载到AppDomain中即可

效果示意图

内容的提问来源于stack exchange,提问作者ShortDevelopment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:15:04