【问题标题】:How to multitarget .NET 5 and .NET Core 3.1 while still building on .NET Core 3.0 SDK如何在 .NET Core 3.0 SDK 上构建多目标 .NET 5 和 .NET Core 3.1
【发布时间】: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


【解决方案1】:

这是不可能的。

新的 SDK(例如 5.0)可以通过旧的 TargetFrameworks(netcoreapp2.1netcoreapp3.1 等)针对旧的运行时。

较旧的 SDK 无法通过新的 TargetFrameworks 定位较新的运行时。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2021-03-20
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多