C# netcoreapp3.1软件包是否与net5.0兼容?

C# netcoreapp3.1软件包是否与net5.0兼容?,c#,.net-core,.net-5,C#,.net Core,.net 5,我有一组C#项目,目前将netcoreapp3.1作为TargetFramework。它们作为多个库和一个可执行的.NET核心全局工具发布到nuget.org 我的库中的一些客户端希望切换到net5.0,但似乎需要同时安装运行时(net5.0和netcoreapp3.1)。使用netcoreapp3.1库的net5.0项目是否没有向后兼容性 如果我将我的库切换到net5.0,我想这会破坏仍然使用netcoreapp3.1的客户端,对吗 我发现我可以设置net5.0;netcoreapp3.1,但

我有一组C#项目,目前将netcoreapp3.1作为TargetFramework。它们作为多个库和一个可执行的.NET核心全局工具发布到nuget.org

我的库中的一些客户端希望切换到
net5.0
,但似乎需要同时安装运行时(
net5.0
netcoreapp3.1
)。使用
netcoreapp3.1
库的
net5.0
项目是否没有向后兼容性

如果我将我的库切换到
net5.0
,我想这会破坏仍然使用
netcoreapp3.1
的客户端,对吗


我发现我可以设置
net5.0;netcoreapp3.1
,但最好不要总是为多个框架版本编译和发布单独的二进制文件。有可能吗?

你为什么不试试呢?您会发现,.NET 5可以引用任何.NET标准/.NET核心版本。@camilo terevinto:实际上我在一台只安装了.NET 5的机器上进行了实验。我发现我可以编译我的工具,但运行它会出现以下错误:找不到任何兼容的框架版本。找不到框架“Microsoft.NETCore.App”,版本“3.1.0”。-找到了以下框架:5.0.2在[/usr/share/dotnet/shared/Microsoft.NETCore.App]但是,在.NET5客户机中引用库确实有效,这是对的。为什么库和可执行二进制文件之间的兼容性存在差异?因为一个(独立3.1)是需要框架才能运行的应用程序,而另一个(打包为5.0中的引用)只是一个不需要安装完整运行时的库,因为应用程序将负责原始加载。这也解释了为什么3.1->5.0是有效的,但是5.0->3.1不是。谢谢!我真的很想更好地理解这一点。假设我有库代码L,并使用3.1将其编译为LB包。然后我有一个引用LB的客户端代码A,我用3.1编译了一次到AB3.1,用5.0编译了一次到AB5.0。为什么5.0运行时可以执行AB5.0,但不能执行AB3.1?若你们能给我一个很好的参考资料来解释这个兼容性问题,那个就太好了。我手头并没有任何参考资料,这主要来自于使用不同的.NET核心版本的经验。基本上,5.0运行时可以运行5.0应用程序,3.1运行时可以运行3.1应用程序,依此类推。然而,运行一个应用程序所需要的依赖性远远大于库所需要的依赖性,因为这一部分是向后兼容的(但要理解,使向后兼容可能是CLR的5%与使100%兼容明显不同)。这就是为什么可以同时安装5.0和3.1