Delen via


'dotnet publish' maakt gebruik van releaseconfiguratie

De dotnet publish opdracht gebruikt nu de Release configuratie in plaats van de Debug configuratie standaard als het doelframework .NET 8 of een latere versie is.

Vorig gedrag

Eerder gebruikte dotnet publish de Debug configuratie, tenzij de configuratie expliciet was opgegeven of PublishRelease was ingesteld op true.

De PublishRelease eigenschap is in .NET 7 toegevoegd als oplossing voor deze ingrijpende wijziging. Voorheen kon u de DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS omgevingsvariabele instellen voor gebruik PublishRelease in een project dat deel uitmaakte van een Visual Studio-oplossing.

Nieuw gedrag

Als u ontwikkelt met de .NET 8 SDK of een latere versie, wordt de dotnet publish configuratie standaard gebruikt voor projecten waarvan Release is ingesteld op TargetFramework of een latere versie. Als u een CI/CD-script, tests of code hebt waarin u Debug hardcode in een uitvoerpad hebt geplaatst, kan deze wijziging verstoring in uw werkstroom veroorzaken.

Als uw project is gericht op meerdere versies, is het nieuwe gedrag alleen van toepassing als u een doelframework van .NET 8 of hoger opgeeft wanneer u publiceert (bijvoorbeeld met behulp van dotnet publish -f net8.0).

Voor projecten in een oplossing:

  • dotnet publish kan alle projecten in een Visual Studio-oplossing publiceren als er een oplossingsbestand wordt gegeven. Voor de oplossingsprojecten die gericht zijn op .NET 8 of hoger, wordt de waarde van PublishRelease impliciet ingesteld op true als deze niet is gedefinieerd. dotnet publish Om echter de juiste configuratie te kunnen bepalen die voor de oplossing moet worden gebruikt, moeten alle projecten in de oplossing akkoord gaan met hun waarde van PublishRelease. Als een ouder project in de oplossing is PublishRelease ingesteld op false, moet u de eigenschap false ook expliciet instellen voor nieuwe .NET 8+-projecten.

  • Deze wijziging kan de prestaties van dotnet publish regressies veroorzaken, met name voor oplossingen die veel projecten bevatten. Hiertoe is een nieuwe omgevingsvariabele DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS geïntroduceerd.

  • De DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS omgevingsvariabele wordt niet meer herkend.

Geïntroduceerde versie

.NET 8 Preview 1

Type van brekende verandering

Deze wijziging kan van invloed zijn op de broncompatibiliteit en is ook een gedragswijziging.

Reden voor wijziging

In de meeste gevallen wanneer u publiceert, wilt u dat uw code is geoptimaliseerd en de app kleiner kan houden door foutopsporingsgegevens uit te sluiten. Klanten hebben al lange tijd gevraagd om `Release` de standaardconfiguratie voor `publish` te maken. Bovendien heeft Visual Studio dit gedrag al vele jaren gehad.

De DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS omgevingsvariabele is verwijderd omdat het gedrag dat is ingeschakeld nu het standaardgedrag is en het gedetailleerde besturingselement niet meer nodig is.

  • Als u het nieuwe gedrag volledig wilt uitschakelen, kunt u de DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE omgevingsvariabele true instellen op (of een andere waarde). Deze variabele is van invloed op zowel dotnet publish als dotnet pack.

  • Als u expliciet de Debug configuratie voor publicatie wilt opgeven, gebruikt u de -c of --configuration optie met dotnet publish.

  • Als uw CI/CD-pijplijn is verbroken vanwege vastgelegde uitvoerpaden, werkt u de paden bij naar Release in plaats van, schakelt u het nieuwe gedrag uit met behulp van Debugde DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE omgevingsvariabele of geeft u op dat de Debug configuratie moet worden gebruikt.

  • Als u een oplossing publiceert en deze is kapot, kunt u expliciet PublishRelease instellen naar true (of false om terug te keren naar het vorige gedrag).

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

    U kunt het alternatief de eigenschap opgeven in een Directory.Build.Props-bestand. Als u dit false echter instelt in dit bestand, moet u de eigenschap false nog steeds expliciet instellen in de .NET 8+-projecten in de oplossing. Als sommige projecten expliciet een andere waarde instellen dan de waarde in het bestand Directory.Build.Props , mislukt het publiceren.

  • Als u een oplossing publiceert en de prestaties zijn teruggedraaid, kunt u de DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS omgevingsvariabele true instellen op (of een andere waarde) om de regressie te verwijderen. Als u deze variabele echter instelt en uw oplossing een .NET 8+ project en een project bevat dat is gericht op .NET 7 of eerder, mislukt het publiceren totdat alle projecten zijn gedefinieerd PublishRelease. Deze variabele is van invloed op zowel dotnet publish als dotnet pack.

Zie ook