„dotnet publish“ verwendet die Release-Konfiguration.

Der Befehl dotnet publish verwendet jetzt standardmäßig die Release-Konfiguration anstelle der Debug-Konfiguration, wenn das Zielframework .NET 8 oder eine höhere Version ist.

Vorheriges Verhalten

Zuvor hatte dotnet publish die Debug-Konfiguration verwendet, es sei denn, die Konfiguration wurde explizit angegeben, oder PublishRelease wurde auf true festgelegt.

Die PublishRelease-Eigenschaft wurde in .NET 7 als Pfadweiterleitung zu diesem Breaking Change hinzugefügt. Zuvor konnten Sie die Umgebungsvariable DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS auf die Verwendung von PublishRelease in einem Projekt festlegen, das Teil einer Visual Studio-Projektmappe war.

Neues Verhalten

Wenn Sie mit dem .NET 8 SDK oder einer höheren Version entwickeln, verwendet dotnet publish die Release-Konfiguration standardmäßig für Projekte, deren TargetFramework auf net8.0 oder eine höhere Version festgelegt ist. Wenn Sie über ein CI/CD-Skript, Tests oder Code verfügen, in dem Sie Debug in einem Ausgabepfad hartcodiert haben, kann diese Änderung Ihren Workflow unterbrechen.

Wenn Ihr Projekt auf mehrere Versionen abzielt, gilt das neue Verhalten nur, wenn Sie beim Veröffentlichen ein Zielframework von .NET 8 oder höher angeben (z. B. mit dotnet publish -f net8.0).

Für Projekte in einer Projektmappe:

  • dotnet publish kann alle Projekte in einer Visual Studio-Projektmappe veröffentlichen, wenn eine Projektmappendatei angegeben wird. Bei Projektmappenprojekten, die auf .NET 8 oder höher abzielen, wird der Wert von PublishRelease implizit auf true festgelegt, wenn er nicht definiert ist. Damit dotnet publish jedoch die richtige für die Projektmappe zu verwendende Konfiguration ermitteln kann, müssen sich alle Projekte in der Projektmappe auf den Wert von PublishRelease einigen. Wenn für ein älteres Projekt in der Projektmappe PublishRelease auf false festgelegt ist, sollten Sie die Eigenschaft auch für alle neuen .NET 8+-Projekte explizit auf false festlegen.

  • Diese Änderung kann dazu führen, dass die Leistung von dotnet publish sinkt, insbesondere bei Projektmappen, die viele Projekte enthalten. Um dies zu beheben, wurde die neue Umgebungsvariable DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS eingeführt.

  • Die DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS-Umgebungsvariable ist nicht mehr gültig.

Eingeführt in Version

.NET 8 Preview 1

Typ des Breaking Changes

Diese Änderung kann sich auf die Quellkompatibilität auswirken und ist außerdem eine Verhaltensänderung (Behavior Change).

Grund für die Änderung

In den meisten Fällen, wenn Sie veröffentlichen, möchten Sie, dass Ihr Code optimiert wird, und die App kann kleiner gehalten werden, indem Debuginformationen ausgeschlossen werden. Kunden haben seit langem darum gebeten, dass Release die Standardkonfiguration für publish sein soll. Außerdem weist Visual Studio dieses Verhalten schon seit vielen Jahren auf.

Die Umgebungsvariable DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS wurde entfernt, da das von ihr ermöglichte Verhalten nun das Standardverhalten ist, weshalb die präzise Steuerung nicht mehr erforderlich ist.

  • Um das neue Verhalten vollständig zu deaktivieren, können Sie die Umgebungsvariable DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE auf true (oder einen anderen Wert) festlegen. Diese Variable wirkt sich sowohl auf dotnet publish als auch auf dotnet pack aus.

  • Um die Debug-Konfiguration für das Veröffentlichen explizit anzugeben, verwenden Sie die Option -c oder --configuration mit dotnet publish.

  • Wenn Ihre CI/CD-Pipeline aufgrund hartcodierter Ausgabepfade unterbrochen wird, aktualisieren Sie die Pfade auf Release anstelle von Debug, deaktivieren Sie das neue Verhalten mithilfe der Umgebungsvariablen DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE, oder geben Sie an, dass die Debug-Konfiguration verwendet werden soll.

  • Wenn Sie eine Projektmappe veröffentlichen und diese beschädigt ist, können Sie PublishRelease explizit auf true festlegen (oder auf false, um zum vorherigen Verhalten zurückzukehren).

    <PropertyGroup>
      <PublishRelease>true</PublishRelease>
    </PropertyGroup>
    

    Alternativ können Sie die Eigenschaft in einer Directory.Build.Props-Datei angeben. Wenn Sie sie jedoch in dieser Datei auf false festlegen, müssen Sie die Eigenschaft dennoch in den .NET 8+-Projekten in der Projektmappe explizit auf false festlegen. Auf ähnliche Weise schlägt die Veröffentlichung fehl, wenn einige Projekte explizit einen Wert festlegen, der sich vom Wert in der Datei Directory.Build.Props unterscheidet.

  • Wenn Sie eine Projektmappe veröffentlichen und die Leistung gesunken ist, können Sie die Umgebungsvariable DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS auf true (oder einen anderen Wert) festlegen, um den Leistungsabfall zu beseitigen. Wenn Sie jedoch diese Variable festlegen und Ihre Projektmappe ein .NET 8+-Projekt sowie ein Projekt, das auf .NET 7 oder niedriger abzielt, enthält, schlägt die Veröffentlichung so lange fehl, bis alle Projekte PublishRelease definiert haben. Diese Variable wirkt sich sowohl auf dotnet publish als auch auf dotnet pack aus.

Weitere Informationen