gpt4 book ai didi

c# - 同一进程中加载​​的两个 .NET CLR 如何相互通信?

转载 作者:行者123 更新时间:2023-11-30 14:00:20 25 4
gpt4 key购买 nike

既然可以在同一个盒子上运行两个 CLR,那么它们如何相互“交谈”呢?

假设 GUI 在 .NET 2.0 CLR 下运行,并且有一个脚本在 .NET 4.0 CLR 上运行,例如,有没有办法从 4.0 环境修改基于 2.0 的 GUI?

当我使用此技术将 .NET C# REPL 环境注入(inject)另一个 .net 进程时,我遇到了这个确切的问题:Video: Injecting C# DLLs into Managed (C#) and Unmanaged (C++) processes


注:我问了一个类似的question at Reddit and that version contains large number of references如果您对并行执行和 CLR 托管主题感兴趣,这将很有用

最佳答案

通常,两个单独的 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文章,详细描述了这一点。

至于你的具体例子:

Let's say that the GUI is running under .NET 2.0 CLR and there is a script running on the .NET 4.0 CLR, for example, is there a way to modify the 2.0 based GUI from the 4.0 environment?

如果您尝试直接加载 4.0 程序集,它将失败。您必须使用 COM 互操作来加载它,在这种情况下,所有通信都通过 COM 进行。 4.0 GUI 应用程序可以加载 2.0“脚本”——但它是在 4.0 运行时加载的。

关于c# - 同一进程中加载​​的两个 .NET CLR 如何相互通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11111235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com