我知道我不可能是唯一一个有这个问题的人,但我的谷歌搜索根本没有提供任何有成效的东西.我可能漏掉了一些关键词.无论如何,问题是:

我们正在开发一个利用第三方后端的C#程序.无论如何,我们都不能用这个后端来替代其他东西.

此后端的API由后端制造商以两个DLL的形式提供,目前构建在.NET Framework4.6.1上,并将很快升级到.NET Framework4.8.一两年后,它很可能会使用其他版本,因为4.8是.NET框架的最后一个版本.

我们的大部分程序都是关于很多其他东西的,我们希望能够用.NET Framework4.8之外的新东西来编写代码,例如.NET6或8.

所以现在我的问题是,我们如何才能有一个Visual Studio解决方案与不同的项目,其中一个目标.NET Framework 4.8和其他目标.NET 6,说?

(想象一下,一个没有工厂的汽车制造商试图在.NET 8.0中自动化整个汽车设计过程,但最终不得不让一些只使用.NET Framework4.8的外部工厂来制造汽车.)

我以前有一个.NET框架4.7.2项目和一个.NET标准2.0项目的解决方案,但它们是兼容的.如果我有两个不兼容的.NET版本,该怎么办?我希望有某种可以在这里使用的架构或设计模式.我猜这可以通过某种微服务架构来完成,但我不知道它们如何才能最好地相互对话……

推荐答案

如果你幸运的话,你可以直接在.NET5+项目中使用.Net框架库.在.NET4.8和.NET5之间删除了一些API,如果使用这些API,您将得到运行时错误,并且由于这个原因,Visual Studio将会抱怨.但它应该相当容易测试,而且可能会运行得很好.

另请注意,通过在项目文件中使用<LangVersion>latest</LangVersion>标记,可以在.Net Framwork项目中编写最新的C#版本的代码.这只适用于不需要运行时更改的"语法建议"内容.但这样的句法建议仍然对开发有一定帮助.

通用的解决方案是在不同的进程中运行不同的.NET项目,并使用您喜欢的进程间通信(IPC)方法来处理调用.有很多这样的方法可供 Select ,但你可以从gRPC种方法开始.请注意,这种方法在开发中意味着相当大的开销,因为任何调用都需要经过额外的通信层.

Csharp相关问答推荐

Unity如何在PlayerPrefs中保存数据?

读取配置文件(mytest. exe. config)

==和Tuple对象的相等<>

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

使用C#中的SDK在Microsoft Graph API上使用SubscribedSkus的问题

用C#调用由缓冲区指针参数组成的C API

如何将ASP.NET Core 2.1(在.NET框架上运行)更新到较新的版本?

ASP.NET Core AutoMapper:如何解决错误 CS0121调用在以下方法或属性之间不明确

如何使用C#获取FireStore中的列表输出文档

在.NET MAUI.NET 8中如何防止按钮点击时出现灰色反馈

如何在Cosmos SDK中控制超时、重试和重试之间的延迟?

在Windows Plesk上发布ASP.NET Core 7 Web API-错误:无法加载文件或程序集';Microsoft.Data.SqlClient';

在C#中,是否有与变量DISARD对应的C++类似功能?

Postgres ENUM类型在第一次运行时对Dapper不可见

Azure Functions v4中的Serilog控制台主题

这是否比决定是否使用ConfigureAWait(False)更好?

ASP.NET MVC数据批注验证组复选框

C#-如何将int引用获取到byte[]

将带有嵌套If-Else的Foreach循环转换为Linq表达式

将ValueTask发送给调用者