-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 操作(例如 build
和 publish
)有时可能会触发对 MSBuild 的第二次调用,尤其是在使用 -f
选项指定应对特定 TargetFramework 生成版本时。 在这种情况下,-getItem
、-getProperty
和 -getTargetResult
选项将传递给两个 MSBuild 调用,而不是只传递给用户预期触发的调用。
建议的操作
选择执行下列操作之一:
- 使用旧版 .NET SDK(在引入回归之前)。
- 使用包含修补程序的 .NET 8 SDK 版本,该版本应是 8.0.202 之后的任何版本。
- 从同时使用
-getItem
、-getProperty
或-getTargetResults
的调用中删除对-f
的任何使用。