Aplikacje specyficzne dla środowiska uruchomieniowego nie są już samodzielne
Aplikacje specyficzne dla środowiska uruchomieniowego lub aplikacje platformy .NET z elementem RuntimeIdentifier
nie 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 jawniefalse
wartości , właściwościPublishSingleFile
publikowania iPublishAot
implikowaneRuntimeIdentifier
wartości i w związkuSelfContained
z tym (jeśli nie zostały określone) podczas operacji, w tymdotnet build
,dotnet restore
idotnet publish
. - Właściwość
PublishTrimmed
nie oznaczałaSelfContained
. - Właściwość
PublishReadyToRun
implikujeSelfContained
, jeśliSelfContained
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 jawniefalse
wartości , właściwościPublishSingleFile
PublishAot
publikowania i teraz implikująSelfContained
(jeśli nie zostały określone) tylko w ciągudotnet publish
tylko (nie dotyczydotnet build
dotnet restore
lub ). - Właściwość
PublishTrimmed
również oznaczaSelfContained
teraz podczasdotnet publish
. - Właściwość
PublishReadyToRun
nie oznaczaSelfContained
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ć SelfContained
wartość , 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ę.
Zalecana akcja
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
natrue
tak samo jak poprzednio opisana.
Ustawianie właściwości pliku projektu
SelfContained
jest 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>