Polecenie "dotnet publish" używa konfiguracji wydania

Polecenie dotnet publish teraz używa Release konfiguracji zamiast Debug konfiguracji domyślnie, jeśli platforma docelowa to .NET 8 lub nowsza wersja.

Poprzednie zachowanie

Wcześniej użyto konfiguracji, dotnet publish chyba że konfiguracja została określona jawnie lub PublishRelease została ustawiona na true.Debug

Właściwość PublishRelease została dodana na platformie .NET 7 jako ścieżka do tej zmiany powodującej niezgodność. Wcześniej można było ustawić zmienną DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS środowiskową do użycia PublishRelease w projekcie, który był częścią rozwiązania programu Visual Studio.

Nowe zachowanie

Jeśli programujesz przy użyciu zestawu .NET 8 SDK lub nowszej wersji, dotnet publish domyślnie używa Release konfiguracji dla projektów, których TargetFramework wersja jest ustawiona na net8.0 lub nowszą. Jeśli masz skrypt ciągłej integracji/ciągłego wdrażania, testy lub kod, w którym kod został zakodowany Debug na stałe w ścieżce wyjściowej, ta zmiana może spowodować przerwanie przepływu pracy.

Jeśli projekt jest przeznaczony dla wielu wersji, nowe zachowanie ma zastosowanie tylko wtedy, gdy określisz platformę docelową platformy .NET 8 lub nowszą podczas publikowania (na przykład przy użyciu polecenia dotnet publish -f net8.0).

W przypadku projektów w rozwiązaniu:

  • dotnet publish program może opublikować wszystkie projekty w rozwiązaniu programu Visual Studio, jeśli zostanie podany plik rozwiązania. W przypadku projektów rozwiązań przeznaczonych dla platformy .NET 8 lub nowszej PublishRelease wartość jest niejawnie ustawiona na true , jeśli jest niezdefiniowana. Jednak aby dotnet publish określić poprawną konfigurację do użycia dla rozwiązania, wszystkie projekty w rozwiązaniu muszą uzgodnić ich wartość PublishRelease. Jeśli starszy projekt w rozwiązaniu ma PublishRelease ustawioną wartość false, należy jawnie ustawić właściwość na false dla wszystkich nowych projektów .NET 8+.

  • Ta zmiana może spowodować regresję dotnet publish wydajności, zwłaszcza w przypadku rozwiązań zawierających wiele projektów. Aby rozwiązać ten problem, wprowadzono nową zmienną środowiskową DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS .

  • Zmienna DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS środowiskowa nie jest już rozpoznawana.

Wprowadzona wersja

.NET 8 (wersja zapoznawcza 1)

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność źródła i jest również zmianą behawioralną.

Przyczyna wprowadzenia zmiany

W większości przypadków podczas publikowania chcesz, aby kod był optymalizowany i może zachować mniejszy rozmiar aplikacji, wykluczając informacje debugowania. Klienci poprosili o Release ustawienie domyślnej konfiguracji przez publish długi czas. Ponadto program Visual Studio od wielu lat ma to zachowanie.

Zmienna DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS środowiskowa została usunięta, ponieważ włączone zachowanie jest teraz zachowaniem domyślnym, a szczegółowa kontrolka nie jest już konieczna.

  • Aby całkowicie wyłączyć nowe zachowanie, możesz ustawić zmienną DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE środowiskową na true (lub dowolną inną wartość). Ta zmienna ma wpływ zarówno na , jak dotnet publish i dotnet pack.

  • Aby jawnie określić konfigurację publikowania Debug , użyj -c opcji lub --configuration z opcją dotnet publish.

  • Jeśli potok ciągłej integracji/ciągłego wdrażania jest uszkodzony z powodu zakodowanych na stałe ścieżek wyjściowych, zaktualizuj ścieżki Release zamiast Debug, wyłącz nowe zachowanie przy użyciu DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE zmiennej środowiskowej lub określ, czy Debug konfiguracja powinna być używana.

  • Jeśli publikujesz rozwiązanie i jest ono uszkodzone, możesz jawnie ustawić PublishRelease wartość true (lub false przywrócić poprzednie zachowanie).

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

    Alternatywnie można określić właściwość w pliku Directory.Build.Props . Jeśli jednak ustawisz go false w tym pliku, nadal musisz jawnie ustawić właściwość na false w projektach .NET 8+ w rozwiązaniu. Podobnie jeśli niektóre projekty jawnie ustawią wartość inną niż wartość w pliku Directory.Build.Props , publikowanie zakończy się niepowodzeniem.

  • Jeśli publikujesz rozwiązanie i wydajność uległa pogorszeniu, możesz ustawić DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS zmienną środowiskową na true (lub dowolną inną wartość), aby usunąć regresję. Jeśli jednak ustawisz tę zmienną, a rozwiązanie zawiera projekt .NET 8+ i projekt przeznaczony dla platformy .NET 7 lub starszej wersji, publikowanie zakończy się niepowodzeniem, dopóki wszystkie projekty nie zdefiniują PublishReleaseelementu . Ta zmienna ma wpływ zarówno na , jak dotnet publish i dotnet pack.

Zobacz też