Freigeben über


Doppelte Ausgabe bei -getItem, -getProperty und -getTargetResult

Beim .NET SDK 8.0.200 wurde eine Regression in den neuen MSBuild CLI-Optionen -getItem, -getProperty und -getTargetResult eingeführt. Wenn das SDK zum Ausführen eines MSBuild-Vorgangs für ein bestimmtes TargetFramework verwendet wird, wird die Ausgabe wie folgt dupliziert:

> 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/

Hinweis

Wir beabsichtigen, dieses Verhalten in einem bevorstehenden Release des .NET 8.0.200 SDK zu beheben.

Eingeführt in Version

.NET 8.0.200

Vorheriges Verhalten

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

Neues Verhalten

Das Erstellen, Laden oder Ausführen eines betroffenen Projekts schlägt fehl.

Typ des Breaking Changes

Dies ist ein Behavior Change, der sich auf Benutzerskripts auswirken kann, insbesondere in CI/CD-Szenarien.

Grund für die Änderung

Diese Optionen sollen eigentlich Werte zurückgeben, die aus einem einzelnen von den Benutzern und Benutzerinnen angeforderten Build berechnet werden. Vom SDK initiierte MSBuild-Vorgänge wie build und publish können jedoch manchmal einen zweiten Aufruf von MSBuild auslösen – insbesondere, wenn die Option -f verwendet wird, um anzugeben, dass ein Build auf ein bestimmtes TargetFramework abzielt. In diesem Szenario wurden die Optionen -getItem, -getProperty und -getTargetResult an beide MSBuild-Aufrufe übergeben, anstatt nur an den, den die Benutzer/Benutzerinnen auslösen wollten.

Wählen Sie eine der folgenden Aktionen aus:

  • Verwenden Sie eine ältere Version des .NET SDK (vor Einführung der Regression).
  • Verwenden Sie eine Version des .NET 8 SDK, das den Fix enthält, also jede Version nach 8.0.202.
  • Entfernen Sie alle Verwendungen von -f aus Aufrufen, die auch -getItem, -getProperty oder -getTargetResults verwenden.