Balíček distribuce .NET

Protože jsou .NET 5 (a .NET Core) a novější verze k dispozici na více a více platformách, je užitečné naučit se balit, pojmenovat a používat aplikace a knihovny verzí, které ji používají. Správci balíčků tak můžou zajistit konzistentní prostředí bez ohledu na to, kde se uživatelé rozhodnou spustit .NET. Tento článek je užitečný pro uživatele, kteří jsou:

  • Probíhá pokus o sestavení rozhraní .NET ze zdroje.
  • Chcete provést změny rozhraní příkazového řádku .NET, které by mohlo mít vliv na výsledné rozložení nebo vytvořené balíčky.

Rozložení disku

Při instalaci se .NET skládá z několika komponent, které jsou v systému souborů rozloženy následujícím způsobem:

{dotnet_root}                    (0)              (*)
├── dotnet                       (1)
├── LICENSE.txt                  (8)
├── ThirdPartyNotices.txt        (8)
├── host                                          (*)
│   └── fxr                                       (*)
│       └── <fxr version>        (2)
├── sdk                                           (*)
│   └── <sdk version>            (3)
├── sdk-manifests                (4)              (*)
│   └── <sdk feature band version>
├── library-packs                (4)              (*)
├── metadata                     (4)              (*)
│   └── workloads
│       └── <sdk feature band version>
├── template-packs               (4)              (*)
├── packs                                         (*)
│   ├── Microsoft.AspNetCore.App.Ref              (*)
│   │   └── <aspnetcore ref version>     (11)
│   ├── Microsoft.NETCore.App.Ref                 (*)
│   │   └── <netcore ref version>        (12)
│   ├── Microsoft.NETCore.App.Host.<rid>          (*)
│   │   └── <apphost version>            (13)
│   ├── Microsoft.WindowsDesktop.App.Ref          (*)
│   │   └── <desktop ref version>        (14)
│   ├── NETStandard.Library.Ref                   (*)
│   │   └── <netstandard version>        (15)
│   ├── Microsoft.NETCore.App.Runtime.<rid>       (*)
│   │   └── <runtime version>            (18)
│   └── Microsoft.AspNetCore.App.Runtime.<rid>    (*)
│       └── <aspnetcore version>         (18)
├── shared                                        (*)
│   ├── Microsoft.NETCore.App                     (*)
│   │   └── <runtime version>     (5)
│   ├── Microsoft.AspNetCore.App                  (*)
│   │   └── <aspnetcore version>  (6)
│   ├── Microsoft.AspNetCore.All                  (*)
│   │   └── <aspnetcore version>  (6)
│   └── Microsoft.WindowsDesktop.App              (*)
│       └── <desktop app version> (7)
└── templates                                     (*)
│   └── <templates version>      (17)
/
├── etc/dotnet
│       └── install_location     (16)
├── usr/share/man/man1
│       └── dotnet.1.gz          (9)
└── usr/bin
        └── dotnet               (10)
  • (0) {dotnet_root} je sdílený kořen pro všechny hlavní a podverze .NET. Pokud je nainstalováno více modulů runtime, sdílejí například složku {dotnet_root} , {dotnet_root}/shared/Microsoft.NETCore.App/6.0.11 a {dotnet_root}/shared/Microsoft.NETCore.App/7.0.0. Název {dotnet_root} složky by měl být nezávislý na verzi, to znamená jednoduše dotnet.

  • (1) dotnet Hostitel (označovaný také jako "muxer") má dvě odlišné role: aktivaci modulu runtime pro spuštění aplikace a aktivaci sady SDK pro odeslání příkazů do ní. Hostitel je nativní spustitelný soubor (dotnet.exe).

Zatímco existuje jeden hostitel, většina ostatních komponent je ve verzích adresářů (2,3,5,6). To znamená, že v systému může existovat více verzí, protože jsou nainstalované vedle sebe.

  • (2) verze> hostitele/fxr/<fxr obsahuje logiku překladu architektury používanou hostitelem. Hostitel používá nejnovější nainstalovaný hostfxr. Hostfxr zodpovídá za výběr příslušného modulu runtime při provádění aplikace .NET. Například aplikace vytvořená pro .NET 7.0.0 používá modul runtime 7.0.5, pokud je k dispozici. Podobně hostfxr vybere během vývoje příslušnou sadu SDK.

  • (3) sdk/<sdk verze> Sdk (označovaná také jako "nástroje") je sada spravovaných nástrojů, které slouží k psaní a sestavování knihoven a aplikací .NET. Sada SDK zahrnuje .NET CLI, kompilátory spravovaných jazyků, MSBuild a přidružené úlohy a cíle sestavení, NuGet, nové šablony projektů atd.

  • (4) Verze pásu funkcí sdk-manifests/<sdk verze> Názvy a verze prostředků, které vyžaduje volitelná instalace úloh, se uchovávají v manifestech úloh uložených v této složce. Název složky je verze sady SDK v pásmu funkcí. Pro verzi sady SDK, například 7.0.102, by se tato složka stále jmenovala 7.0.100. Při instalaci úlohy se podle potřeby vytvoří následující složky pro prostředky úlohy: sady library-pack, metadata a šablony. Distribuce může vytvořit prázdný soubor /metadata/workloads/<sdkfeatureband>/userlocal , pokud by se úlohy měly instalovat v cestě uživatele, a ne ve složce dotnet . Další informace najdete v tématu Problém s GitHubem dotnet/installer#12104.

Sdílená složka obsahuje architektury. Sdílená architektura poskytuje sadu knihoven v centrálním umístění, aby je mohly používat různé aplikace.

  • (5) sdílená/Microsoft.NETCore.App/<runtime verze> Tato architektura obsahuje modul runtime .NET a podporu spravovaných knihoven.

  • (6) shared/Microsoft.AspNetCore.{ Verze App,All}/<aspnetcore> obsahuje knihovny ASP.NET Core. Knihovny jsou vyvíjeny Microsoft.AspNetCore.App a podporovány jako součást projektu .NET. Knihovny jsou Microsoft.AspNetCore.All nadmnožinou, která obsahuje také knihovny třetích stran.

  • (7) sdílená/Microsoft.Desktop.App/<desktopová verze aplikace> obsahuje desktopové knihovny Windows. Tato funkce není zahrnutá na platformách jiných než Windows.

  • (8) LICENSE.txt,ThirdPartyNotices.txt jsou licence .NET a licence knihoven třetích stran používané v .NET.

  • (9 10) dotnet.1.gz, dotnet je stránka dotnetdotnet.1.gz ručně. dotnet je symlink na hostitele dotnet(1). Tyto soubory se instalují ve známých umístěních pro integraci systému.

  • (11 12) Microsoft.NETCore.App.Ref,Microsoft.AspNetCore.App.Ref popisují rozhraní API x.y verze .NET a ASP.NET Core. Tyto balíčky se používají při kompilaci pro tyto cílové verze.

  • (13) Microsoft.NETCore.App.Host.<rid> obsahuje nativní binární soubor pro platformu rid. Tento binární soubor je šablona při kompilaci aplikace .NET do nativního binárního souboru pro danou platformu.

  • (14) Microsoft.WindowsDesktop.App.Ref popisuje rozhraní API x.y verze desktopových aplikací windows. Tyto soubory se používají při kompilaci pro daný cíl. To není k dispozici na platformách jiných než Windows.

  • (15) NETStandard.Library.Ref popisuje rozhraní NETStandard x.y API. Tyto soubory se používají při kompilaci pro daný cíl.

  • (16) /etc/dotnet/install_location je soubor, který obsahuje úplnou cestu pro {dotnet_root}. Cesta může končit novým řádekem. Tento soubor není nutné přidat, pokud je /usr/share/dotnetkořen .

  • Šablony (17) obsahují šablony používané sadou SDK. Tady například dotnet new najdete šablony projektů.

  • (18) Microsoft.NETCore.App.Runtime.<rid>/<runtime verze>, Microsoft.AspNetCore.App.Runtime.<Verze rid>/<aspnetcore> Tyto soubory umožňují vytvářet samostatné aplikace. Tyto adresáře obsahují symbolické odkazy na soubory v (2), (5) a (6).

Složky označené (*) několika balíčky používají. Některé formáty balíčků (například rpm) vyžadují zvláštní zpracování těchto složek. Správce balíčků se o to musí postarat.

Správa verzí .NET je založená na číslech verzí součástí [major].[minor] modulu runtime. Verze sady SDK používá stejnou [major].[minor] verzi a má nezávislou [patch] kombinaci sémantiky funkcí a oprav pro sadu SDK. Příklad: SDK verze 7.0.302 je druhá verze opravy třetí verze funkce sady SDK, která podporuje modul runtime 7.0. Další informace o tom, jak funguje správa verzí, najdete v tématu s přehledem správy verzí .NET.

Některé balíčky obsahují část čísla verze v názvu. To vám umožní nainstalovat konkrétní verzi. Zbytek verze není součástí názvu verze. To umožňuje správci balíčků operačního systému aktualizovat balíčky (například automaticky instalovat opravy zabezpečení). Podporované správce balíčků jsou specifické pro Linux.

Následující seznam obsahuje doporučené balíčky:

  • dotnet-sdk-[major].[minor] – Nainstaluje nejnovější sadu SDK pro konkrétní modul runtime.

    • Verze:<sdk>
    • Příklad: dotnet-sdk-7.0
    • Obsahuje: (3),(4);(18)
    • Závislosti:dotnet-runtime-[major].[minor], aspnetcore-runtime-[major].[minor], dotnet-targeting-pack-[major].[minor], aspnetcore-targeting-pack-[major].[minor], netstandard-targeting-pack-[netstandard_major].[netstandard_minor], dotnet-apphost-pack-[major].[minor]dotnet-templates-[major].[minor]
  • aspnetcore-runtime-[major].[minor] – Nainstaluje konkrétní modul runtime ASP.NET Core.

    • Verze:<aspnetcore runtime>
    • Příklad: aspnetcore-runtime-7.0
    • Obsahuje: (6)
    • Závislosti:dotnet-runtime-[major].[minor]
  • dotnet-runtime-deps-[major].[minor](Volitelné) – Nainstaluje závislosti pro spouštění samostatných aplikací.

    • Verze:<runtime>
    • Příklad: dotnet-runtime-deps-7.0
    • Závislosti: závislosti specifické pro distribuci
  • dotnet-runtime-[major].[minor] – Nainstaluje konkrétní modul runtime.

    • Verze:<runtime>
    • Příklad: dotnet-runtime-7.0
    • Obsahuje: (5)
    • Závislosti:dotnet-hostfxr-[major].[minor], dotnet-runtime-deps-[major].[minor]
  • dotnet-hostfxr-[major].[minor] -Závislost

    • Verze:<runtime>
    • Příklad: dotnet-hostfxr-7.0
    • Obsahuje: (2)
    • Závislosti:dotnet-host
  • dotnet-host -Závislost

    • Verze:<runtime>
    • Příklad: dotnet-host
    • Obsahuje: (1),(8);(9);(10);(16)
  • dotnet-apphost-pack-[major].[minor] -Závislost

    • Verze:<runtime>
    • Obsahuje: (13)
  • dotnet-targeting-pack-[major].[minor] – Umožňuje cílení na modul runtime, který není nejnovější.

    • Verze:<runtime>
    • Obsahuje: (12)
  • aspnetcore-targeting-pack-[major].[minor] – Umožňuje cílení na modul runtime, který není nejnovější.

    • Verze:<aspnetcore runtime>
    • Obsahuje: (11)
  • netstandard-targeting-pack-[netstandard_major].[netstandard_minor] - Umožňuje cílení na netstandardovou verzi.

    • Verze:<sdk>
    • Obsahuje: (15)
  • dotnet-templates-[major].[minor]

    • Verze:<sdk>
    • Obsahuje: (17)

Následující dva metabaly jsou volitelné. Přinášejí koncovým uživatelům hodnotu v tom, že abstrahují balíček nejvyšší úrovně (dotnet-sdk), který zjednodušuje instalaci úplné sady balíčků .NET. Tyto metabalely odkazují na konkrétní verzi sady .NET SDK.

  • dotnet[major] – Nainstaluje zadanou verzi sady SDK.

    • Verze:<sdk>
    • Příklad: dotnet7
    • Závislosti:dotnet-sdk-[major].[minor]
  • dotnet – Nainstaluje konkrétní verzi sady SDK určenou distribucí, která má být primární verzí – obvykle nejnovější dostupnou verzí.

    • Verze:<sdk>
    • Příklad: dotnet
    • Závislosti:dotnet-sdk-[major].[minor]

Vyžaduje dotnet-runtime-deps-[major].[minor] pochopení závislostí specifických pro danou distribuci. Vzhledem k tomu, že systém sestavení distribuce může být schopen tuto možnost automaticky odvodit, je balíček volitelný, v takovém případě jsou tyto závislosti přidány přímo do dotnet-runtime-[major].[minor] balíčku.

Pokud je obsah balíčku ve složce s verzí, název [major].[minor] balíčku odpovídá názvu složky s verzí. Pro všechny balíčky s výjimkou netstandard-targeting-pack-[netstandard_major].[netstandard_minor], to se také shoduje s verzí .NET.

Závislosti mezi balíčky by měly používat stejný nebo větší požadavek na verzi. Například vyžaduje dotnet-sdk-7.0:7.0.401aspnetcore-runtime-7.0 >= 7.0.6. To uživateli umožňuje upgradovat instalaci prostřednictvím kořenového balíčku (například dnf update dotnet-sdk-7.0).

Většina distribucí vyžaduje, aby se všechny artefakty vytvořily ze zdroje. To má vliv na balíčky:

  • Knihovny třetích stran shared/Microsoft.AspNetCore.All se nedají snadno sestavit ze zdroje. Aby byla složka z aspnetcore-runtime balíčku vynechána.

  • Vyplní se NuGetFallbackFolder pomocí binárních artefaktů z nuget.org. Měl by zůstat prázdný.

Více dotnet-sdk balíčků může poskytovat stejné soubory pro NuGetFallbackFolder. Aby nedocházelo k problémům se správcem balíčků, měly by být tyto soubory identické (kontrolní součet, datum změny atd.).

Ladění balíčků

Ladicí obsah by se měl zabalit do balíčků s názvem ladění, které následují podle rozdělení balíčku .NET popsaného výše v tomto článku. Například ladicí obsah balíčku dotnet-sdk-[major].[minor] by měl být součástí balíčku s názvem dotnet-sdk-dbg-[major].[minor]. Ladicí obsah byste měli nainstalovat do stejného umístění jako binární soubory.

Tady je několik binárních příkladů:

{dotnet_root}/sdk/<sdk version> V adresáři se očekávají následující dva soubory:

  • dotnet.dll- nainstalována s balíčkem dotnet-sdk-[major].[minor]
  • dotnet.pdb- nainstalována s balíčkem dotnet-sdk-dbg-[major].[minor]

{dotnet_root}/shared/Microsoft.NETCore.App/<runtime version> V adresáři se očekávají následující dva soubory:

  • System.Text.Json.dll- nainstalována s balíčkem dotnet-runtime-[major].[minor]
  • System.Text.Json.pdb- nainstalována s balíčkem dotnet-runtime-dbg-[major].[minor]

{dotnet_root/shared/Microsoft.AspNetCore.App/<aspnetcore version> V adresáři se očekávají následující dva soubory:

  • Microsoft.AspNetCore.Routing.dll - nainstalována s aspnetcore-runtime-[major].[minor] balíčky
  • Microsoft.AspNetCore.Routing.pdb - nainstalována s aspnetcore-runtime-dbg-[major].[minor] balíčky

Od verze .NET 8.0 je veškerý ladicí obsah .NET (soubory PDB), vytvořený zdrojovým sestavením, k dispozici v tarballu s názvem dotnet-symbols-sdk-<version>-<rid>.tar.gz. Tento archiv obsahuje soubory PDB v podadresářích, které odpovídají adresářové struktuře tarball sady .NET SDK - dotnet-sdk-<version>-<rid>.tar.gz.

I když je veškerý ladicí obsah dostupný v ladicím tarballu, ne veškerý ladicí obsah je stejně důležitý. Koncoví uživatelé se většinou zajímají o obsah shared/Microsoft.AspNetCore.App/<aspnetcore version> adresářů a shared/Microsoft.NETCore.App/<runtime version> adresářů.

Obsah sady SDK v části sdk/<sdk version> je užitečný pro ladění sad nástrojů .NET SDK.

Doporučené balíčky ladění jsou následující balíčky:

  • aspnetcore-runtime-dbg-[major].[minor] – Nainstaluje ladicí obsah pro konkrétní modul runtime ASP.NET Core.

    • Verze:<aspnetcore runtime>
    • Příklad: aspnetcore-runtime-dbg-8.0
    • Obsahuje: ladicí obsah pro (6)
    • Závislosti:aspnetcore-runtime-[major].[minor]
  • dotnet-runtime-dbg-[major].[minor] – Nainstaluje ladicí obsah pro konkrétní modul runtime.

    • Verze:<runtime>
    • Příklad: dotnet-runtime-dbg-8.0
    • Obsahuje: ladicí obsah pro (5)
    • Závislosti:dotnet-runtime-[major].[minor]

Následující ladicí balíček je volitelný:

  • dotnet-sdk-dbg-[major].[minor] – Nainstaluje ladicí obsah pro konkrétní verzi sady SDK.
    • Verze:<sdk>
    • Příklad: dotnet-sdk-dbg-8.0
    • Obsahuje: ladicí obsah pro (3),(4),(18)
    • Závislosti:dotnet-sdk-[major].[minor]

Ladicí tarball obsahuje také nějaký ladicí obsah pod packs, který představuje kopie obsahu pod shared. V rozložení packs .NET se adresář používá k vytváření aplikací .NET. Neexistují žádné scénáře ladění, takže byste neměli zabalovat ladicí obsah packs v ladicím tarballu.

Vytváření balíčků

Úložiště dotnet/source-build obsahuje pokyny k sestavení zdrojového tarballu sady .NET SDK a všech jejích komponent. Výstup úložiště zdrojového sestavení odpovídá rozložení popsanému v první části tohoto článku.