Sdílet prostřednictvím


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 na false, vlastnosti PublishSingleFile publikování a PublishAot implikují RuntimeIdentifier a proto SelfContained (pokud nebyly zadány) během operací, včetně dotnet build, dotnet restorea dotnet publish.
  • Vlastnost PublishTrimmed neznamenala SelfContained.
  • Vlastnost PublishReadyToRun implikovaná SelfContained , pokud SelfContained 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ě nastaveno false, vlastnosti PublishSingleFile publikování a PublishAot nyní naznačují SelfContained (pokud není zadán) pouze během dotnet publish (to znamená, ne pro dotnet build nebo dotnet restore).
  • Vlastnost PublishTrimmed také nyní předpokládá SelfContained během dotnet 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.

  • 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-containednapříklad .

  • Pokud používáte .NET 8 a chcete zachovat předchozí chování, nastavte SelfContainedtrue 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>

Viz také