Vyberte verzi .NET, která se má použít.

Tento článek vysvětluje zásady používané nástroji .NET, sadou SDK a modulem runtime pro výběr verzí. Tyto zásady poskytují rovnováhu mezi spouštěním aplikací pomocí zadaných verzí a usnadňují upgrade počítačů pro vývojáře i koncové uživatele. Tyto zásady umožňují:

  • Snadné a efektivní nasazení rozhraní .NET, včetně aktualizací zabezpečení a spolehlivosti.
  • Používejte nejnovější nástroje a příkazy nezávislé na cílovém modulu runtime.

Dojde k výběru verze:

Zbývající část tohoto dokumentu se zabývá těmito čtyřmi scénáři.

Sada SDK používá nejnovější nainstalovanou verzi.

Mezi příkazy sady SDK patří dotnet new a dotnet run. Rozhraní .NET CLI musí pro každý dotnet příkaz zvolit verzi sady SDK. Používá nejnovější sadu SDK nainstalovanou na počítači ve výchozím nastavení, i když:

  • Projekt cílí na starší verzi modulu runtime .NET.
  • Nejnovější verze sady .NET SDK je verze Preview.

Při cílení na starší verze modulu runtime .NET můžete využít nejnovější funkce a vylepšení sady SDK. Pomocí stejných nástrojů sady SDK můžete cílit na různé verze modulu runtime .NET.

Ve výjimečných případech může být nutné použít starší verzi sady SDK. Tuto verzi zadáte v souboru global.json. Zásada "použít nejnovější" znamená, že k zadání verze sady .NET SDK používáte pouze soubor global.json , který je starší než nejnovější nainstalovaná verze.

soubor global.json lze umístit kdekoli v hierarchii souborů. Rozhraní příkazového řádku vyhledá v adresáři projektu první soubor global.json , který najde. Určujete, na které projekty se daný soubor global.json vztahuje, podle jejich místa v systému souborů. Rozhraní příkazového řádku .NET hledá soubor global.json iterativním přechodem směrem nahoru od aktuálního pracovního adresáře. První nalezený soubor global.json určuje použitou verzi. Pokud je tato verze sady SDK nainstalovaná, použije se tato verze. Pokud se sada SDK zadaná v souboru global.json nenajde, rozhraní příkazového řádku .NET použije odpovídající pravidla k výběru kompatibilní sady SDK nebo selže, pokud se žádná nenajde.

Následující příklad ukazuje syntaxi global.json :

{
  "sdk": {
    "version": "5.0.0"
  }
}

Výběr verze sady SDK je následující:

  1. dotnet vyhledá soubor global.json iterativním přecházením cesty směrem nahoru od aktuálního pracovního adresáře.
  2. dotnet používá sadu SDK zadanou v prvním nalezeném souboru global.json .
  3. dotnet používá nejnovější nainstalovanou sadu SDK, pokud není nalezena žádná global.json .

Další informace o výběru verze sady SDK najdete v části Párování pravidel a rollForward v článku s přehledem souboru global.json .

Monikers cílové architektury definují rozhraní API pro čas sestavení

Projekt sestavíte s využitím rozhraní API definovaných v cílové architektuře Moniker (TFM). Cílovou architekturu zadáte v souboru projektu. TargetFramework Nastavte element v souboru projektu, jak je znázorněno v následujícím příkladu:

<TargetFramework>net5.0</TargetFramework>

Projekt můžete sestavit pro více TFM. Nastavení více cílových architektur je pro knihovny běžnější, ale dá se provádět i s aplikacemi. Zadáte TargetFrameworks vlastnost (množné číslo ).TargetFramework Cílové architektury jsou oddělené středníky, jak je znázorněno v následujícím příkladu:

<TargetFrameworks>net5.0;netcoreapp3.1;net47</TargetFrameworks>

Daná sada SDK podporuje pevnou sadu architektur omezených na cílovou architekturu modulu runtime, se kterým se dodává. Například sada .NET 5 SDK zahrnuje modul runtime .NET 5, což je implementace net5.0 cílové architektury. Sada .NET 5 SDK podporuje netcoreapp2.0, netcoreapp2.1netcoreapp3.0, a tak dále, ale ne net6.0 (nebo vyšší). Nainstalujete sadu .NET 6 SDK pro sestavení pro net6.0.

.NET Standard

.NET Standard byl způsob, jak cílit na plochu rozhraní API sdílenou různými implementacemi .NET. Počínaje verzí .NET 5, což je samotný standard rozhraní API, má rozhraní .NET Standard malou relevanci, s výjimkou jednoho scénáře: .NET Standard je užitečný, pokud chcete cílit na rozhraní .NET i .NET Framework. .NET 5 implementuje všechny verze .NET Standard.

Další informace najdete v tématech .NET 5 a .NET Standard.

Roll-forward aplikací závislých na architektuře

Když spustíte aplikaci ze zdroje pomocí dotnet run, z nasazení závislého na architektuře s dotnet myapp.dllnebo ze spustitelného souboru závislého na architektuředotnet pomocí myapp.exe, je spustitelný soubor hostitelem aplikace.

Hostitel zvolí nejnovější verzi opravy nainstalované na počítači. Pokud jste například zadali net5.0 v souboru projektu a 5.0.2 je nainstalovaný nejnovější modul runtime .NET, použije se 5.0.2 modul runtime.

Pokud není nalezena žádná přijatelná 5.0.* verze, použije se nová 5.* verze. Pokud jste například zadali net5.0 a je nainstalovaná jenom 5.1.0 aplikace, spustí se pomocí modulu 5.1.0 runtime. Toto chování se označuje jako "roll-forward podverze". Nebudou brány v úvahu ani nižší verze. Pokud není nainstalovaný žádný přijatelný modul runtime, aplikace se nespustí.

Několik příkladů použití ukazuje chování, pokud cílíte na 5.0:

  • ✔️ Je zadána hodnota 5.0. 5.0.3 je nejvyšší nainstalovaná verze opravy. Používá se 5.0.3.
  • ❌ Je zadána hodnota 5.0. Nejsou nainstalovány žádné verze 5.0.*. 3.1.1 je nejvyšší nainstalovaný modul runtime. Zobrazí se chybová zpráva.
  • ✔️ Je zadána hodnota 5.0. Nejsou nainstalovány žádné verze 5.0.*. 5.1.0 je nejvyšší nainstalovaná verze modulu runtime. Používá se 5.1.0.
  • ❌ Je zadána hodnota 3.0. Nejsou nainstalovány žádné verze 3.x. 5.0.0 je nejvyšší nainstalovaný modul runtime. Zobrazí se chybová zpráva.

Roll-forward podverze má jeden vedlejší účinek, který může ovlivnit koncové uživatele. Představte si následující scénář:

  1. Aplikace určuje, že se vyžaduje verze 5.0.
  2. Při spuštění není verze 5.0.* nainstalovaná, ale verze 5.1.0 je. Použije se verze 5.1.0.
  3. Později uživatel nainstaluje verzi 5.0.3 a aplikaci znovu spustí. Nyní se použije verze 5.0.3.

Je možné, že verze 5.0.3 a 5.1.0 se chovají odlišně, zejména ve scénářích, jako je serializace binárních dat.

Řízení chování roll-forward

Před přepsáním výchozího chování roll-forward se seznamte s úrovní kompatibility modulu runtime .NET.

Chování aplikace k postupnému přechácení se dá nakonfigurovat čtyřmi různými způsoby:

  1. Nastavení na úrovni projektu nastavením <RollForward> vlastnosti:

    <PropertyGroup>
      <RollForward>LatestMinor</RollForward>
    </PropertyGroup>
    
  2. Soubor *.runtimeconfig.json .

    Tento soubor se vytvoří při kompilaci aplikace. <RollForward> Pokud byla vlastnost nastavena v projektu, je reprodukována v *.runtimeconfig.json souboru jako rollForward nastavení. Uživatelé můžou upravit tento soubor a změnit tak chování vaší aplikace.

    {
      "runtimeOptions": {
        "tfm": "net5.0",
        "rollForward": "LatestMinor",
        "framework": {
          "name": "Microsoft.NETCore.App",
          "version": "5.0.0"
        }
      }
    }
    
  3. Vlastnost dotnet příkazu --roll-forward <value>

    Při spuštění aplikace můžete řídit chování roll-forward prostřednictvím příkazového řádku:

    dotnet run --roll-forward LatestMinor
    dotnet myapp.dll --roll-forward LatestMinor
    myapp.exe --roll-forward LatestMinor
    
  4. Proměnná DOTNET_ROLL_FORWARD prostředí.

Priorita

Při spuštění aplikace se chování roll forward nastavuje v následujícím pořadí, přičemž vyšší číslování položek má přednost před položkami s nižšími čísly:

  1. Nejprve se *.runtimeconfig.json vyhodnotí konfigurační soubor.
  2. DOTNET_ROLL_FORWARD Dále se zvažuje proměnná prostředí, která přepisuje předchozí kontrolu.
  3. Každý parametr předaný --roll-forward spuštěné aplikaci nakonec přepíše všechno ostatní.

Hodnoty

I když nastavíte nastavení roll-forward, použijte k nastavení chování jednu z následujících hodnot:

Hodnota Popis
Minor Výchozí , pokud není zadáno.
Pokud požadovaná podverze chybí, můžete přejít na nejnižší vyšší podverzi. Pokud požadovaná podverze existuje, použije se LatestPatch zásada.
Major Pokud požadovaná hlavní verze chybí, přejděte na další dostupnou vyšší hlavní verzi a nejnižší podverzi. Pokud je požadovaná hlavní verze k dispozici, použije se Minor zásada.
LatestPatch Přechod na nejvyšší verzi opravy Tato hodnota zakáže roll-forward podverze.
LatestMinor Přechod na nejvyšší podverzi, a to i v případě, že je k dispozici požadovaná podverze.
LatestMajor Přechod na nejvyšší hlavní a nejvyšší podverzi, a to i v případě, že je k dispozici požadovaná hlavní verze.
Disable Nepřevádět dopředu, pouze vytvořit vazbu na zadanou verzi. Tato zásada se nedoporučuje pro obecné použití, protože zakazuje přechod k nejnovějším opravám. Tato hodnota se doporučuje pouze pro testování.

Samostatná nasazení zahrnují vybraný modul runtime.

Aplikaci můžete publikovat jako samostatnou distribuci. Tento přístup sbalí modul runtime .NET a knihovny s vaší aplikací. Samostatná nasazení nejsou závislá na prostředích modulu runtime. Výběr verze modulu runtime probíhá v době publikování, nikoli v době běhu.

Událost obnovení , ke které dojde při publikování, vybere nejnovější verzi oprav dané řady modulů runtime. Například vybere .NET 5.0.3, dotnet publish pokud se jedná o nejnovější verzi opravy v rodině modulů runtime .NET 5. Cílová architektura (včetně nejnovějších nainstalovaných oprav zabezpečení) je zabalená s aplikací.

Pokud není splněná minimální verze zadaná pro aplikaci, dojde k chybě. dotnet publish vytvoří vazbu na nejnovější verzi opravy modulu runtime (v rámci dané řady hlavních.podverze). dotnet publish nepodporuje sémantiku dotnet runfunkce . Další informace o opravách a samostatných nasazeních najdete v článku o výběru oprav za běhu při nasazování aplikací .NET.

Samostatná nasazení můžou vyžadovat konkrétní verzi opravy. Minimální verzi opravy modulu runtime (na vyšší nebo nižší verzi) v souboru projektu můžete přepsat, jak je znázorněno v následujícím příkladu:

<PropertyGroup>
  <RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>

Element RuntimeFrameworkVersion přepíše výchozí zásady verze. Pro samostatná nasazení RuntimeFrameworkVersion určuje přesnou verzi architektury modulu runtime. U aplikací závislých na architektuře RuntimeFrameworkVersion určuje minimální požadovanou verzi rozhraní runtime.

Viz také