如何从另一个应用程序读取 .NET Core 控制台应用程序的内部结构?

How to read internals of .NET Core console app from another app?

我有一个 .NET Core 控制台应用程序,它用一些 public 属性实例化了一些 public classes。它 运行 是一个在某些条件下修改这些 public 属性的循环。这些属性在应用程序的生命周期内每秒更新几次。

现在我想要另一个带有用户界面的应用程序来显示来自控制台应用程序的数据。我如何从一个应用程序获取另一个应用程序的 public 属性中的数据?

不需要

想法

要在进程之间进行通信,您只能使用几个实用选项(none 您似乎想要这样做):

  • 命名管道
  • 某种基于套接字的通信(在这种情况下不是 WCF,因为您使用的是 .NET Core)
    • 这可能是您的应用程序之间的自定义协议。
    • 可以使用外部消息代理(例如 RabbitMQ)。
    • 可以从控制台应用程序发送 UDP 消息。
  • 基于文件的通信(考虑到界面的繁琐程度,这似乎不适合您的场景)。

我使用 System.Runtime.Loader.AssemblyLoadContext.

解决了这个问题

我在运行时将程序集加载到我的应用程序中,然后实例化它的 类 并从我的实例中读取 public 属性。

class Program
{
    static void Main(string[] args)
    {
        var fileName = @"C:\temp\foo.dll";
        var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(fileName);
        var type = assembly.GetType("MyApplication.Car");
        dynamic carInstance = Activator.CreateInstance(type);
        Console.WriteLine(carInstance.Color);
    }
}

解决此问题的另一种方法是将项目导入为项目引用。这样我就受益于强类型。