如何在 Rider 中同时加载 5.0 和 4.7.2 项目?

How can I simultaneously load 5.0 and 4.7.2 projects in Rider?

我有一个包含 net5.0v4.7.2 项目的 .NET 解决方案。它在 Windows 上按预期在 Visual Studio 中打开。但是当我在 Ubuntu 上的 Rider 中打开它时,我从一个或另一个框架中得到了装配错误。 (Ubuntu 20.04.2 LTS 上的 Rider 2021.1.3 从 Snap Store 安装。)

我已经根据 https://www.mono-project.com/download/stable/#download-lin-ubuntu

安装了最新的 Stable Mono
$ mono --version
Mono JIT compiler version 6.12.0.122 (tarball Mon Feb 22 17:33:28 UTC 2021)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:           __thread
    SIGSEGV:       altstack
    Notifications: epoll
    Architecture:  amd64
    Disabled:      none
    Misc:          softdebug 
    Interpreter:   yes
    LLVM:          yes(610)
    Suspend:       hybrid
    GC:            sgen (concurrent by default)

我已经从 Snap 商店安装了最新的稳定版 .NET SDK。

$ dotnet --version
5.0.301

在 Rider 中,我可以在 MSBuild 15.0(来自 /usr/lib/mono)或 16.0(来自 /snap/dotnet-sdk)之间进行选择。此设置会影响解决方案中的所有项目。

如果我选择 15.0(单声道),那么 net5.0 项目会失败(请参阅下面的消息)并且 v4.7.2 可以正确加载。

[MSB3644] The reference assemblies for .NETFramework,Version=v5.0 were not found. To
resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version
or retarget your application. You can download .NET Framework Developer Packs
at https://aka.ms/msbuild/developerpacks at (1193:5)

如果我选择 16.0 (SDK),那么 net5.0 项目会正确加载,但 v4.7.2 会失败:

[MSB3644] The reference assemblies for .NETFramework,Version=v4.7.2 were not found.
To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework
version or retarget your application. You can download .NET Framework Developer Packs
at https://aka.ms/msbuild/developerpacks at (1216:5)

如何解决此问题,以便同一解决方案中的 net5.0v4.7.2 项目在 Ubuntu 上的 Rider 中加载时不会出现引用错误?

您必须将参考程序集安装到以 net472(或任何其他)完整框架为目标的 .NET 项目中。更具体地说,这个 NuGet 包: https://www.nuget.org/packages/Microsoft.NETFramework.ReferenceAssemblies/

有关更多信息,您可以阅读一篇关于 .net 参考程序集的文章,例如这篇文章: https://andrewlock.net/using-reference-assemblies-to-build-net-framework-libararies-on-linux-without-mono/