Din*_*ruz 3 c# clr clr-hosting clr4.0 dll-injection
现在可以在同一个盒子上运行两个CLR,它们怎么能互相"说话"呢?
假设GUI在.NET 2.0 CLR下运行,并且在.NET 4.0 CLR上运行了一个脚本,例如,有没有办法从4.0环境修改基于2.0的GUI?
当我使用这种技术将.NET C#REPL环境注入另一个.net进程时,我遇到了这个问题:视频:将C#DLL注入托管(C#)和非托管(C++)进程
通常,进程中托管两个单独的CLR仅在COM世界中完成.当您使用COM进行扩展等时,会加载适当的运行时.在这种情况下,CLR对象可以通过COM"相互"交谈,因为COM完全是关于互操作性的.
纯托管应用程序将始终在4.0 CLR中运行 - 因此加载2.0程序集的4.0应用程序将最终在CLR 4中执行2.0程序集.
有关详细信息,请参阅CLR Inside Out:In-Process Side by Side文章,其中详细介绍了这一点.
至于你的具体例子:
假设GUI在.NET 2.0 CLR下运行,并且在.NET 4.0 CLR上运行了一个脚本,例如,有没有办法从4.0环境修改基于2.0的GUI?
如果您尝试直接加载4.0程序集,它将失败.您必须使用COM interop来加载它,在这种情况下,所有通信都通过COM进行.4.0 GUI应用程序可以加载2.0"脚本" - 但它在4.0运行时加载.