【发布时间】:2021-05-15 11:26:46
【问题描述】:
我正在尝试升级我的项目以支持 .NET 5,同时仍在 .NET Core 3.1 工具集上构建。
我尝试像这样将 .NET 5 TFM (.net5.0) 添加到我的目标框架中。
<TargetFrameworks>netcoreapp3.0;netcoreapp3.1;net5.0</TargetFrameworks>
很遗憾,这会导致在仅安装了 .NET Core 3.1 工具集的机器上运行时构建失败。
error MSB3971: The reference assemblies for ".NETFramework,Version=v5.0" were not found. You might be using an older .NET SDK to target .NET 5.0 or higher. Update Visual Studio and/or your .NET SDK.
我正在尝试找到一个条件,以便仅在可用时才能定位net5.0,但文档很少。
【问题讨论】:
-
我认为 MSBuild 没有给你一个合适的条件来定义。但在您的构建脚本中,您可以检测可用的实际 SDK 版本并即时修改项目文件(删除 .NET 5 目标)
-
您在这里的确切目标是什么?你到底想做什么?为什么您希望一个项目可以由多个 SDK 版本构建?为什么不将其保留在(例如)
netcoreapp3.1?另外,假设您可以使用 3.1 SDK 构建。你的预期结果是什么?您是否也希望能够在那里运行net5.0应用程序? -
我的项目多目标
.netstandard2.0、.netcoreapp3.1和.net5.0,并定义了特定于 SDK 的代码。出于兼容性原因,它应该仍然可以针对旧版 SDK 构建,但代码的.net5.0部分已定义。 -
如果您的系统上没有 .net 5,您将如何期望 VS 构建一个可供其他 .net 5 系统使用/使用的程序集。多目标是指您的代码生成的工件,而不是用于构建它的工具。打个比方,如果您是一名摄影师,那么多目标就是为您的客户提供一卷胶卷和一个 USB 数码产品。如果您只有胶片相机,您将无法制作 USB 数码产品。您的构建环境需要 .net5 才能制作以 .net5 为目标的工件。
标签: .net-core build msbuild csproj multitargeting