You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Assembly.GetCallingAssembly()与方法内联的技术疑问

Assembly.GetCallingAssembly() 内联相关疑问解答

1. M1和M2的内联要求

只需要给直接调用Assembly.GetCallingAssembly()的M1标记[MethodImpl(MethodImplOptions.NoInlining)],不用管M2是否内联。只要M1保持独立不被内联,不管M2有没有被内联到M3里,GetCallingAssembly()都会返回A2——因为调用M1的始终是M2所属的A2程序集代码,哪怕M2的代码被合并到M3中,代码的程序集归属不会变。

如果M1被内联到M2里,这时候结果才会受M2内联状态影响:M2未被内联时,调用GetCallingAssembly()的逻辑等同于M2直接调用它,此时返回的是调用M2的程序集(A3);M2被内联到M3的话,返回调用M3的程序集。

2. 扩展调用链的内联处理

不需要给整条调用链(M3、M4、M5...)都标记禁止内联,核心只需要保证直接调用Assembly.GetCallingAssembly()的那个方法不被内联。只要这个方法是独立存在的,上层调用链的方法无论是否内联,都不会改变GetCallingAssembly()的返回结果——它只会识别到直接调用该方法的程序集。

3. M3内联时的情况

分两种场景:

  • M1未被内联:不管M3是否内联,GetCallingAssembly()都返回A2。原因和第一条一致,M1是独立方法,调用它的是A2的代码,M3内联不改变代码的程序集归属。
  • M1被内联到M2:
    • 如果M2也被内联到M3,GetCallingAssembly()的代码会合并到M3中,返回调用M3的方法所在的程序集;
    • 如果M2未被内联,哪怕M3被内联,调用M2的还是M3所属的A3程序集代码,所以返回A3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:10:49