Aplikace specifické pro modul runtime už nejsou samostatně obsažené.
Aplikace specifické pro modul runtime nebo aplikace .NET s příponou RuntimeIdentifier
, už nejsou ve výchozím nastavení samostatně obsažené . Místo toho jsou ve výchozím nastavení závislé na rozhraní.
Jedná se o zásadní změnu v následujících situacích:
- Pokud jste nasadili, distribuovali nebo publikovali aplikaci a explicitně nepřidali
SelfContained
vlastnost, ale také jste nepožadovali, aby modul runtime .NET byl na počítači nainstalovaný, aby fungoval. V tomto případě jste se mohli spolehnout na předchozí chování, abyste ve výchozím nastavení vytvořili samostatnou aplikaci. - Pokud se spoléháte na nástroj IL Link. V tomto případě proveďte kroky popsané v části Doporučená akce pro opětovné použití odkazu IL.
Předchozí chování
Pokud byl dříve zadán identifikátor modulu runtime (RID) (prostřednictvím modulu RuntimeIdentifier), aplikace byla publikována jako samostatná, i když SelfContained
nebyla explicitně zadána.
Kromě toho:
- Pokud
PublishSelfContained
nebyla explicitně nastavena nafalse
, vlastnostiPublishSingleFile
publikování aPublishAot
implikujíRuntimeIdentifier
a protoSelfContained
(pokud nebyly zadány) během operací, včetnědotnet build
,dotnet restore
adotnet publish
. - Vlastnost
PublishTrimmed
neznamenalaSelfContained
. - Vlastnost
PublishReadyToRun
implikovanáSelfContained
, pokudSelfContained
nebyla zadána.
Nové chování
Počínaje .NET 8 už pro aplikace, které cílí na .NET 8 nebo novější verzi, RuntimeIdentifier
už ve výchozím nastavení neznamená SelfContained
. Místo toho aplikace, které určují identifikátor modulu runtime, jsou ve výchozím nastavení závislé na modulu runtime .NET (závislém na architektuře). Aplikace, které cílí na .NET 7 nebo starší verze, nejsou ovlivněné.
Kromě toho:
- Pokud
PublishSelfContained
není explicitně nastavenofalse
, vlastnostiPublishSingleFile
publikování aPublishAot
nyní naznačujíSelfContained
(pokud není zadán) pouze běhemdotnet publish
(to znamená, ne prodotnet build
nebodotnet restore
). - Vlastnost
PublishTrimmed
také nyní předpokládáSelfContained
běhemdotnet publish
. - Vlastnost
PublishReadyToRun
již neznamenáSelfContained
, pokud projekt cílí na .NET 8 nebo novější.
Poznámka:
Pokud publikujete pomocí msbuild /t:Publish
a chcete, aby vaše aplikace byla samostatná, musíte explicitně zadat SelfContained
, i když má váš projekt jednu z uvedených vlastností publikování.
Zavedená verze
.NET 8 Preview 5
Typ zásadní změny
Tato změna může ovlivnit kompatibilitu zdroje a binární kompatibilitu.
Důvod změny
- Nové chování sady .NET SDK odpovídá chování sady Visual Studio.
- Aplikace závislé na architektuře jsou ve výchozím nastavení menší, protože v každé aplikaci nejsou uložené kopie .NET.
- Pokud je .NET spravován mimo aplikaci (to znamená pro nasazení závislá na rozhraní), zůstane .NET bezpečnější a aktuální. Aplikace, které mají vlastní kopii modulu runtime, nedostanou aktualizace zabezpečení. Díky této změně je ve výchozím nastavení více aplikací závislých na architektuře.
- V ideálním případě jsou možnosti příkazového řádku orthogonální. V tomto případě nástroj podporuje nasazení specifické pro identifikátory RID (SCD) i nasazení závislé na rozhraní (FDD) specifické pro identifikátory RID. Proto nemělo smysl, že se ve výchozím nastavení pro identifikátorY FDD a IDENTIFIKÁTOR RID nenabídlo na SCD žádné identifikátory RID. Toto chování bylo často matoucí pro uživatele.
.NET 6 uživatele upozorňoval na tuto změnu způsobující chybu s následujícím upozorněním:
upozornění NETSDK1179: Při použití modulu ---runtime se vyžaduje jedna z možností --self-contained nebo --no-self-contained.
Teď, když zákazníci měli čas přidat SelfContained
explicitně, je v pořádku zavést přestávku.
Doporučená akce
Pokud používáte .NET 7 nebo starší verzi a spoléháte se na předchozí chování, které
SelfContained
bylo odvozeno, zobrazí se toto upozornění:U projektů s TargetFrameworks >= 8.0 už runtimeIdentifier automaticky neposkytuje aplikaci s vlastním obsahem. Pokud chcete pokračovat ve vytváření nezávislé aplikace rozhraní .NET Framework po upgradu na verzi 8.0, zvažte explicitní nastavení SelfContained.
Postupujte podle pokynů upozornění a deklarujte aplikaci jako samostatnou. Můžete to udělat buď v souboru projektu, nebo jako argument příkazového řádku,
dotnet publish --self-contained
například .Pokud používáte .NET 8 a chcete zachovat předchozí chování, nastavte
SelfContained
true
ho stejným způsobem jako dříve popsané.
Nastavení vlastnosti souboru projektu
SelfContained
je vlastnost MSBuild, kterou můžete vložit do souboru projektu, což je soubor, který má příponu .csproj, .vbproj nebo .fsproj . Nastavte vlastnost následujícím způsobem:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>