-getItem、-getProperty 和 -getTargetResult 的重复输出

.NET SDK 8.0.200 在新的 -getItem-getProperty-getTargetResult MSBuild CLI 选项中引入了回归。 当 SDK 用于针对特定 TargetFramework 执行 MSBuild 操作时,输出将重复,如下所示:

> dotnet build -r:android-arm64 --getProperty:OutputPath -f:net8.0-android
bin\Debug/net8.0-android/android-arm64/
bin\Debug/net8.0-android/android-arm64/

注意

我们打算在即将发布的 .NET 8.0.200 SDK 版本中修复此行为。

引入的版本

.NET 8.0.200

旧行为

> dotnet build -r:android-arm64 --getProperty:OutputPath -f:net8.0-android
bin\Debug/net8.0-android/android-arm64/

新行为

生成、加载或运行受影响的项目失败。

中断性变更的类型

这是影响用户脚本的行为更改,尤其是在 CI/CD 方案中。

更改原因

这些选项旨在返回从单个用户请求的版本计算的值。 但是,SDK 发起的 MSBuild 操作(例如 buildpublish)有时可能会触发对 MSBuild 的第二次调用,尤其是在使用 -f 选项指定应对特定 TargetFramework 生成版本时。 在这种情况下,-getItem-getProperty-getTargetResult 选项将传递给两个 MSBuild 调用,而不是只传递给用户预期触发的调用。

选择执行下列操作之一:

  • 使用旧版 .NET SDK(在引入回归之前)。
  • 使用包含修补程序的 .NET 8 SDK 版本,该版本应是 8.0.202 之后的任何版本。
  • 从同时使用 -getItem-getProperty-getTargetResults 的调用中删除对 -f 的任何使用。