Delen via


'dotnet pack' maakt gebruik van releaseconfiguratie

De dotnet pack opdracht, waarmee code in een NuGet-pakket wordt verpakt, gebruikt nu standaard de Release configuratie in plaats van de Debug configuratie.

Vorig gedrag

Eerder hebt dotnet pack u de Debug configuratie gebruikt, tenzij de configuratie expliciet is opgegeven of PackRelease is ingesteld op true.

De PackRelease eigenschap is in .NET 7 toegevoegd als pad naar deze wijziging die fouten veroorzaken. Voorheen kon u de DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS omgevingsvariabele instellen voor gebruik PackRelease 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, dotnet pack gebruikt u de Release configuratie standaard voor alle projecten. Als u een CI/CD-script, tests of code hebt waarvoor u code hebt vastgelegd Debug in een uitvoerpad, kan deze wijziging uw werkstroom verbreken. U kunt ook geen fouten opsporen in een verpakte app, tenzij de Debug configuratie expliciet is opgegeven (bijvoorbeeld met behulp van dotnet pack --configuration Debug.

dotnet pack kan tegelijkertijd worden verpakt voor meerdere doelframework monikers (TFM). Als uw project is gericht op meerdere versies en u verschillende PackRelease waarden voor verschillende doelen hebt, kunt u een conflict hebben waarbij sommige TFM's de Release configuratie inpakken en andere de Debug configuratie inpakken.

Voor projecten in een oplossing:

  • dotnet pack kan alle projecten in een Visual Studio-oplossing inpakken als er een oplossingsbestand wordt gegeven. Voor elk project in de oplossing wordt de waarde PackRelease impliciet ingesteld op als deze niet is gedefinieerd true . Om dotnet pack de juiste configuratie te kunnen bepalen die moet worden gebruikt, moeten alle projecten in de oplossing akkoord gaan met hun waarde van PackRelease.

  • Deze wijziging kan de prestaties van dotnet pack 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_PACK_RELEASE_FOR_SOLUTIONS omgevingsvariabele wordt niet meer herkend.

Versie geïntroduceerd

.NET 8 Preview 1

Type wijziging die fouten veroorzaken

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

Reden voor wijziging

In de meeste gevallen wanneer u een pakket maakt, wilt u dat uw code is geoptimaliseerd en het pakket kleiner kan houden door foutopsporingsgegevens uit te sluiten.

De DOTNET_CLI_ENABLE_PACK_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 verpakking wilt opgeven, gebruikt u de -c of --configuration optie met dotnet pack.

  • 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 inpakt en deze is verbroken omdat een of meer projecten expliciet een waarde voor PackReleaseinstellen, moet u in elk project expliciet instellen falsePackRelease op:

    <PropertyGroup>
      <PackRelease>false</PackRelease>
    </PropertyGroup>
    
  • Als u een oplossing inpakt 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 gebruikt en elk project definieert PackRelease, moeten alle projecten deze definiëren of kunt u een Map.Build.Props-bestand gebruiken. Deze variabele is van invloed op zowel dotnet publish als dotnet pack.

Zie ook