Freigeben über


„dotnet pack“ verwendet die Release-Konfiguration.

Der dotnet pack Befehl, der Code in ein NuGet-Paket packt, verwendet nun standardmäßig die Release Konfiguration anstelle der Debug Konfiguration.

Vorheriges Verhalten

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

Die PackRelease Eigenschaft wurde in .NET 7 als Pfad zu dieser bahnbrechenden Änderung hinzugefügt. Zuvor konnten Sie die Umgebungsvariable DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS auf die Verwendung von PackRelease 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, dotnet pack wird die Release Konfiguration standardmäßig für alle Projekte verwendet. 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. Außerdem können Sie keine verpackte App debuggen, es sei denn, die Debug Konfiguration wurde explizit angegeben (z. B. die Verwendung dotnet pack --configuration Debug.

dotnet pack kann für mehrere Zielframeworkmoniker (TFM) gleichzeitig packen. Wenn Ihr Projekt auf mehrere Versionen ausgerichtet ist und Sie unterschiedliche PackRelease Werte für unterschiedliche Ziele haben, können Sie einen Konflikt haben, bei dem einige TFMs die Release Konfiguration packen und andere die Debug Konfiguration packen.

Für Projekte innerhalb einer Softwarelösung:

  • dotnet pack kann alle Projekte in einer Visual Studio-Projektmappe packen, wenn eine Projektmappendatei angegeben wird. Für jedes Projekt in der Lösung wird der Wert PackRelease implizit auf true gesetzt, wenn er nicht definiert ist. Um dotnet pack die richtige zu verwendende Konfiguration zu ermitteln, müssen sich alle Projekte in der Lösung auf ihren Wert PackReleaseeinigen.

  • Diese Änderung könnte dazu führen, dass die Leistung von dotnet pack 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_PACK_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, wenn Sie ein Paket erstellen, möchten Sie, dass Ihr Code optimiert wird und Sie das Paket kleiner halten können, indem Sie Debuginformationen ausschließen.

Die DOTNET_CLI_ENABLE_PACK_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 Konfiguration für die Debug Verpackung explizit angeben möchten, verwenden Sie die -c- oder --configuration-Option mit dotnet pack.

  • 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 packen und sie nicht funktioniert, weil eines oder mehrere Projekte explizit einen Wert für PackRelease festlegen, sollten Sie in jedem Projekt explizit PackRelease auf false setzen.

    <PropertyGroup>
      <PackRelease>false</PackRelease>
    </PropertyGroup>
    
  • Wenn Sie eine Lösung packen 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 diese Variable verwenden und ein Projekt PackRelease definiert, müssen alle Projekte dies tun, oder Sie können eine Datei "Directory.Build.Props" verwenden. Diese Variable wirkt sich auf beide dotnet publish und dotnet pack.

Siehe auch