.net core 如何从另一个应用程序读取.NET核心控制台应用程序的内部内容?

.net core 如何从另一个应用程序读取.NET核心控制台应用程序的内部内容?,.net-core,ipc,.net Core,Ipc,我有一个.netcore控制台应用程序,它用一些公共属性实例化一些公共类。它运行一个循环,在某些条件下修改这些公共属性。在应用程序的生命周期内,这些属性每秒更新几次 现在,我需要另一个具有用户界面的应用程序来显示来自控制台应用程序的数据。如何从一个应用程序获取另一个应用程序的公共属性中的数据 不需要 我只对公共课程中的公共属性感兴趣。我对私有属性、字段或内部类不感兴趣 属性经常更新,所以我不想写入文件。我也不想登录到某些云服务,如Azure Application Insights 我不希望为

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

现在,我需要另一个具有用户界面的应用程序来显示来自控制台应用程序的数据。如何从一个应用程序获取另一个应用程序的公共属性中的数据

不需要
  • 我只对公共课程中的公共属性感兴趣。我对私有属性、字段或内部类不感兴趣
  • 属性经常更新,所以我不想写入文件。我也不想登录到某些云服务,如Azure Application Insights
  • 我不希望为了让另一个应用程序能够读取数据而对控制台应用程序进行广泛或侵入性的修改(例如写入命名管道或网络套接字)
思想
  • 是否有任何属性可以用来注释类或它们的属性
  • 我是否必须将控制台应用程序重构为控制台应用程序和UI应用程序都引用的类库?这会将所有代码移出到类库中,并使控制台应用程序只剩下一个静态main方法,该方法只调用一个方法来运行类库中的代码
  • 我的UI应用程序能否连接到控制台应用程序的进程

要在流程之间进行通信,您仅限于几个实用选项(您似乎不想这样做):

  • 命名管道
  • 某种基于套接字的通信(在本例中不是WCF,因为您使用的是.NETCore)
    • 这可能是应用程序之间的自定义协议
    • 可以使用外部消息代理(例如RabbitMQ)
    • 无法从控制台应用程序发送UDP消息
  • 基于文件的通信(考虑到界面的健谈性,似乎不适合您的场景)
我用计算机解决了这个问题

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

类程序
{
静态void Main(字符串[]参数)
{
var fileName=@“C:\temp\foo.dll”;
var assembly=AssemblyLoadContext.Default.LoadFromAssemblyPath(文件名);
var type=assembly.GetType(“MyApplication.Car”);
dynamic carInstance=Activator.CreateInstance(类型);
控制台写入线(carInstance.Color);
}
}

解决此问题的另一种方法是将项目作为项目引用导入。这样,我就可以从强类型中获益。

@KenWhite我的问题清楚地表明它使用.NET核心。WCF在.NET Core上不可用。它是否需要跨不同平台进行移植?消息队列(例如RabbitMQ)或普通的旧TCP客户机/服务器(可能使用HTTP)@AdrianoRepetti这两个应用程序运行在同一台机器上,因此不需要消息队列。此外,属性每秒更新几次,其他应用程序应该实时更新UI,因此不需要消息队列。@Fred我建议进一步研究消息队列。其中一些内存的开销比共享内存低(不幸的是,共享内存不可移植)。它们的伸缩性非常好(每秒几百条消息只是一个很小的数字)。它们的延迟非常低(几百微秒,但这取决于具体的硬件和配置)。再加上一个畅销的、成熟的实现通常带来的好处…@Fred:没错。我错过了;是我的错。我撤回了重复投票。