Udostępnij za pośrednictwem


Aplikacje specyficzne dla środowiska uruchomieniowego nie są już samodzielne

Aplikacje specyficzne dla środowiska uruchomieniowego lub aplikacje platformy .NET z elementem RuntimeIdentifiernie są już domyślnie samodzielne . Zamiast tego są one domyślnie zależne od struktury.

Jest to zmiana powodująca niezgodność w następujących sytuacjach:

  • Jeśli aplikacja została wdrożona, dystrybuowana lub opublikowana i nie została jawnie dodana SelfContained , ale nie wymaga również zainstalowania środowiska uruchomieniowego platformy .NET na maszynie, aby działało. W takim przypadku możesz polegać na poprzednim zachowaniu, aby domyślnie utworzyć samodzielną aplikację.
  • Jeśli korzystasz z narzędzia IL Link. W tym przypadku wykonaj kroki opisane w sekcji Zalecane działanie , aby ponownie użyć linku IL.

Poprzednie zachowanie

Wcześniej, jeśli określono identyfikator środowiska uruchomieniowego (RID) (za pośrednictwem runtimeIdentifier), aplikacja została opublikowana jako samodzielna, nawet jeśli SelfContained nie została jawnie określona.

Dodatkowo:

  • Jeśli PublishSelfContained nie ustawiono jawnie falsewartości , właściwości PublishSingleFile publikowania i PublishAot implikowane RuntimeIdentifier wartości i w związku SelfContained z tym (jeśli nie zostały określone) podczas operacji, w tym dotnet build, dotnet restorei dotnet publish.
  • Właściwość PublishTrimmed nie oznaczała SelfContained.
  • Właściwość PublishReadyToRun implikuje SelfContained , jeśli SelfContained nie została określona.

Nowe zachowanie

Począwszy od platformy .NET 8, w przypadku aplikacji przeznaczonych dla platformy .NET 8 lub nowszej nie RuntimeIdentifier oznacza SelfContained już domyślnie. Zamiast tego aplikacje, które określają identyfikator środowiska uruchomieniowego, są domyślnie zależne od środowiska uruchomieniowego platformy .NET (zależne od platformy). Nie ma to wpływu na aplikacje przeznaczone dla platformy .NET 7 lub starszej wersji.

Dodatkowo:

  • Jeśli PublishSelfContained nie ustawiono jawnie falsewartości , właściwości PublishSingleFile PublishAot publikowania i teraz implikują SelfContained (jeśli nie zostały określone) tylko w ciągu dotnet publish tylko (nie dotyczy dotnet build dotnet restorelub ).
  • Właściwość PublishTrimmed również oznacza SelfContained teraz podczas dotnet publish.
  • Właściwość PublishReadyToRun nie oznacza SelfContained już, czy projekt jest przeznaczony dla platformy .NET 8 lub nowszej.

Uwaga

Jeśli publikujesz przy użyciu polecenia msbuild /t:Publish i chcesz, aby aplikacja stała się samodzielna, musisz jawnie określić SelfContainedwartość , nawet jeśli projekt ma jedną z wymienionych właściwości publikowania.

Wprowadzona wersja

.NET 8 (wersja zapoznawcza 5)

Typ zmiany powodującej niezgodność

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

Przyczyna wprowadzenia zmiany

  • Nowe zachowanie zestawu .NET SDK jest zgodne z zachowaniem programu Visual Studio.
  • Aplikacje zależne od struktury są domyślnie mniejsze, ponieważ w każdej aplikacji nie są przechowywane kopie platformy .NET.
  • Gdy platforma .NET jest zarządzana poza aplikacją (czyli w przypadku wdrożeń zależnych od platformy), platforma .NET pozostaje bezpieczniejsza i aktualna. Aplikacje, które mają własną kopię środowiska uruchomieniowego, nie otrzymują aktualizacji zabezpieczeń. Ta zmiana powoduje, że domyślnie więcej aplikacji zależy od struktury.
  • W idealnym przypadku opcje wiersza polecenia są ortogonalne. W tym przypadku narzędzie obsługuje wdrożenie samodzielne specyficzne dla identyfikatorów RID (SCD) i wdrożenie zależne od struktury specyficzne dla identyfikatora RID (FDD). Nie miało więc sensu, że identyfikator RID nie został domyślnie ustawiony na FDD i identyfikator RID domyślnie na SCD. To zachowanie często było mylące dla użytkowników.

Program .NET 6 powiadomił użytkowników o tej zmianie powodującej niezgodność z następującym ostrzeżeniem:

ostrzeżenie NETSDK1179: jedna z opcji "--self-contained" lub "--no-self-self-contained" jest wymagana, gdy jest używany komunikat "--runtime".

Teraz, gdy klienci mieli czas na jawne dodanie SelfContained , dobrze jest wprowadzić przerwę.

  • Jeśli używasz platformy .NET 7 lub starszej wersji i korzystasz z poprzedniego zachowania, w którym SelfContained zostało wywnioskowane, zostanie wyświetlone następujące ostrzeżenie:

    W przypadku projektów z elementem TargetFrameworks >= 8.0 element RuntimeIdentifier nie daje już automatycznie aplikacji SelfContained. Aby kontynuować tworzenie niezależnej aplikacji .NET Framework po uaktualnieniu do wersji 8.0, rozważ jawne ustawienie SelfContained.

    Postępuj zgodnie ze wskazówkami ostrzeżenia i zadeklaruj aplikację jako samodzielną. Można to zrobić w pliku projektu lub jako argument wiersza polecenia, na przykład dotnet publish --self-contained.

  • Jeśli używasz platformy .NET 8 i chcesz zachować poprzednie zachowanie, ustaw wartość SelfContained na true tak samo jak poprzednio opisana.

Ustawianie właściwości pliku projektu

SelfContainedjest właściwością MSBuild, którą można wstawić do pliku projektu, który jest plikiem, który ma rozszerzenie csproj, vbproj lub .fsproj. Ustaw właściwość w następujący sposób:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <SelfContained>true</SelfContained>
  </PropertyGroup>
</Project>

Zobacz też