Freigeben über


„dotnet publish“ verwendet die Release-Konfiguration.

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

Vorheriges Verhalten

Zuvor hat dotnet publish die Debug Konfiguration verwendet, es sei denn, die Konfiguration wurde explizit angegeben oder PublishRelease auf true gesetzt.

Die PublishRelease Eigenschaft wurde in .NET 7 als Pfad zu dieser bahnbrechenden Änderung 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, wird die dotnet publish Konfiguration standardmäßig für Projekte verwendet, Release deren TargetFramework Version auf net8.0 oder höher festgelegt ist. Wenn Sie über ein CI/CD-Skript, Tests oder Code verfügen, in denen Sie Debug fest in einem Ausgabepfad kodiert haben, kann diese Änderung Ihren Workflow unterbrechen.

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

Für Projekte innerhalb einer Softwarelösung:

  • dotnet publish kann alle Projekte in einer Visual Studio-Projektmappe veröffentlichen, wenn eine Projektmappendatei angegeben wird. Für die Lösungsprojekte, die auf .NET 8 oder höher abzielen, wird der Wert PublishRelease implizit auf true festgelegt, wenn er nicht definiert ist. Um dotnet publish jedoch die richtige Konfiguration zu ermitteln, die für die Lösung verwendet werden soll, müssen sich alle Projekte in der Lösung auf ihren Wert PublishReleaseeinigen. 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 könnte dazu führen, dass die Leistung von dotnet publish nachlassen könnte, insbesondere bei Lösungen, die viele Projekte enthalten. Um dies zu beheben, wurde eine neue Umgebungsvariable DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS eingeführt.

  • Die Umgebungsvariable DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS wird nicht mehr erkannt.

Eingeführte Version

.NET 8 Preview 1

Art der einschneidenden Änderung

Diese Änderung kann sich auf die Quellkompatibilität auswirken und ist auch eine Verhaltensänderung.

Grund für Änderung

In den meisten Fällen möchten Sie, dass Ihr Code optimiert wird und die App kleiner bleibt, indem Sie Debuginformationen ausschließen. Die Kunden haben schon lange gebeten, dass Release die Standardkonfiguration für publish wird. Außerdem hat Visual Studio dieses Verhalten seit vielen Jahren.

Die DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS Umgebungsvariable wurde entfernt, da das aktivierte Verhalten nun das Standardverhalten ist und das granulare Steuerelement nicht mehr erforderlich ist.

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

  • Wenn Sie die Debug Konfiguration für die Veröffentlichung explizit angeben möchten, verwenden Sie die -c oder --configuration Option mit dotnet publish.

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

  • Wenn Sie eine Lösung veröffentlichen und diese fehlerhaft ist, können Sie PublishRelease explizit auf true festlegen (oder false zurücksetzen, um wieder das vorherige Verhalten zu nutzen).

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

    Alternativ können Sie die Eigenschaft in einer Datei "Directory.Build.Props " 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. Wenn einige Projekte einen Wert explizit festlegen, der sich vom Wert in der Datei "Directory.Build.Props " unterscheidet, schlägt die Veröffentlichung fehl.

  • Wenn Sie eine Lösung veröffentlichen und die Leistung sich verschlechtert hat, können Sie die DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS Umgebungsvariable auf true (oder einen anderen Wert) festlegen, um die Regression zu beheben. Wenn Sie diese Variable festlegen und Ihre Lösung jedoch ein .NET 8+-Projekt und ein Projekt enthält, das auf .NET 7 oder früher ausgerichtet ist, schlägt die Veröffentlichung fehl, bis alle Projekte definiert sind PublishRelease. Diese Variable wirkt sich auf beide dotnet publish und dotnet pack.

Siehe auch