„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 vonPublishRelease
implizit auftrue
festgelegt, wenn er nicht definiert ist. Damitdotnet publish
jedoch die richtige für die Projektmappe zu verwendende Konfiguration ermitteln kann, müssen sich alle Projekte in der Projektmappe auf den Wert vonPublishRelease
einigen. Wenn für ein älteres Projekt in der ProjektmappePublishRelease
auffalse
festgelegt ist, sollten Sie die Eigenschaft auch für alle neuen .NET 8+-Projekte explizit auffalse
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 UmgebungsvariableDOTNET_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.
Empfohlene Maßnahme
Um das neue Verhalten vollständig zu deaktivieren, können Sie die Umgebungsvariable
DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
auftrue
(oder einen anderen Wert) festlegen. Diese Variable wirkt sich sowohl aufdotnet publish
als auch aufdotnet pack
aus.Um die
Debug
-Konfiguration für das Veröffentlichen explizit anzugeben, verwenden Sie die Option-c
oder--configuration
mitdotnet publish
.Wenn Ihre CI/CD-Pipeline aufgrund hartcodierter Ausgabepfade unterbrochen wird, aktualisieren Sie die Pfade auf
Release
anstelle vonDebug
, deaktivieren Sie das neue Verhalten mithilfe der UmgebungsvariablenDOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
, oder geben Sie an, dass dieDebug
-Konfiguration verwendet werden soll.Wenn Sie eine Projektmappe veröffentlichen und diese beschädigt ist, können Sie
PublishRelease
explizit auftrue
festlegen (oder auffalse
, 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 auffalse
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
auftrue
(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 ProjektePublishRelease
definiert haben. Diese Variable wirkt sich sowohl aufdotnet publish
als auch aufdotnet pack
aus.