Megosztás a következőn keresztül:


.NET disztribúciós csomagolás

Mivel a .NET 5 (és a .NET Core) és újabb verziók egyre több platformon válnak elérhetővé, hasznos tudni, hogyan csomagolhatja, nevezheti el és verziószámozza azokat az alkalmazásokat és kódtárakat, amelyek ezt használják. Így a csomag karbantartói egységes élményt biztosíthatnak, függetlenül attól, hogy a felhasználók hol futtatják a .NET-et. Ez a cikk a következő felhasználók számára hasznos:

  • .NET-et próbál létrehozni a forrásból.
  • Olyan módosításokat szeretne végezni a .NET CLI-ben, amelyek hatással lehetnek az eredményként létrehozott elrendezésre vagy csomagokra.

Lemezelrendezés

Telepítésekor a .NET több összetevőből áll, amelyek a fájlrendszerben az alábbiak szerint vannak lefektetve:

{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) A(z) {dotnet_root} az összes .NET-főverzió és alverzió közös gyökere. Ha több futtatókörnyezet van telepítve, akkor a (például{dotnet_root}/shared/Microsoft.NETCore.App/6.0.11: {dotnet_root} mappát) és {dotnet_root}/shared/Microsoft.NETCore.App/7.0.0a . A mappa nevének {dotnet_root} agnosztikus verziónak kell lennie, azaz egyszerűen dotnet.

  • (1) dotnet A gazdagép (más néven muxer) két különböző szerepkörrel rendelkezik: aktiváljon egy futtatókörnyezetet egy alkalmazás elindításához, és aktiváljon egy SDK-t a parancsok küldéséhez. A gazdagép natív végrehajtható (dotnet.exe).

Bár egyetlen gazdagép van, a többi összetevő a verziószámozott könyvtárakban (2,3,5,6) található. Ez azt jelenti, hogy több verzió is jelen lehet a rendszeren, mivel egymás mellett vannak telepítve.

  • (2) a gazdagép/fxr/<fxr verzió> tartalmazza a gazdagép által használt keretrendszerfeloldási logikát. A gazdagép a legújabb telepített hostfxrt használja. A hostfxr felelős a megfelelő futtatókörnyezet kiválasztásáért egy .NET-alkalmazás végrehajtásakor. A .NET 7.0.0-hoz készült alkalmazások például a 7.0.5-ös futtatókörnyezetet használják, amikor elérhető. Hasonlóképpen, a hostfxr kiválasztja a megfelelő SDK-t a fejlesztés során.

  • (3) sdk/<sdk verzió> Az SDK (más néven "eszközkészlet") a .NET-kódtárak és -alkalmazások írására és létrehozására használt felügyelt eszközök készlete. Az SDK tartalmazza a .NET CLI-t, a felügyelt nyelvfordítókat, az MSBuildet és a kapcsolódó buildelési feladatokat és célokat, a NuGetet, az új projektsablonokat stb.

  • (4) sdk-manifests/<sdk feature band version> Az opcionális számítási feladatok telepítéséhez szükséges eszközök neve és verziói a mappában tárolt munkaterhelés-jegyzékekben vannak tárolva. A mappa neve az SDK szolgáltatássáv-verziója. Az olyan SDK-verziók esetében, mint például a 7.0.102, ez a mappa továbbra is a 7.0.100 nevet kapta. A számítási feladatok telepítésekor a következő mappák jönnek létre a számítási feladat eszközeihez szükséges módon: kódtárcsomagok, metaadatok és sabloncsomagok. A disztribúció létrehozhat egy üres /metaadat/számítási feladat/<sdkfeatureband>/userlocal fájlt, ha a számítási feladatokat a dotnet mappa helyett egy felhasználói útvonalon kell telepíteni. További információ: GitHub-probléma dotnet/installer#12104.

A megosztott mappa keretrendszereket tartalmaz. A megosztott keretrendszerek egy központi helyen biztosítják a kódtárak készletét, hogy különböző alkalmazások használhassák őket.

  • (5) megosztott/Microsoft.NETCore.App/<runtime verzió> Ez a keretrendszer tartalmazza a .NET-futtatókörnyezetet és a felügyelt kódtárakat.

  • (6) shared/Microsoft.AspNetCore.{ Az App,All}/<aspnetcore verzió> tartalmazza a ASP.NET Core-kódtárakat. Az alatta lévő Microsoft.AspNetCore.App kódtárakat a .NET-projekt részeként fejlesztjük és támogatjuk. Az alatta lévő Microsoft.AspNetCore.All kódtárak olyan szuperhalmazok, amelyek harmadik féltől származó kódtárakat is tartalmaznak.

  • (7) A shared/Microsoft.Desktop.App/<desktop alkalmazás verziója> tartalmazza a Windows asztali kódtárakat. Ez nem szerepel a windowsos platformokon.

  • (8) LICENSE.txt,ThirdPartyNotices.txt a .NET-ben használt külső kódtárak .NET-licencei és licencei.

  • (9,10) dotnet.1.gz a dotnet dotnet.1.gz a dotnet manuális oldala. dotnet egy szimlink a dotnet gazdagéphez(1). Ezek a fájlok jól ismert helyeken vannak telepítve a rendszerintegrációhoz.

  • (11,12) A Microsoft.NETCore.App.Ref,Microsoft.AspNetCore.App.Ref a .NET és a ASP.NET Core egyik x.y verziójának API-ját írja le. Ezeket a csomagokat a célverziók összeállításához használják.

  • (13) Microsoft.NETCore.App.Host.<A rid> egy natív bináris fájlt tartalmaz a platformhoz rid. Ez a bináris egy sablon, amikor egy .NET-alkalmazást natív binárissá állít össze az adott platformhoz.

  • (14) A Microsoft.WindowsDesktop.App.Ref a Windows Desktop-alkalmazások verziójának API-ját x.y ismerteti. Ezeket a fájlokat a cél összeállításakor használja a rendszer. Ez nem windowsos platformokon van megadva.

  • (15) A NETStandard.Library.Ref a netstandard x.y API-t írja le. Ezeket a fájlokat a cél összeállításakor használja a rendszer.

  • (16) /etc/dotnet/install_location egy fájl, amely a teljes elérési utat {dotnet_root}tartalmazza. Az elérési út egy új vonallal végződhet. Nem szükséges hozzáadni ezt a fájlt, ha a gyökér ./usr/share/dotnet

  • (17) A sablonok az SDK által használt sablonokat tartalmazzák. Itt például megtalálhatja a dotnet new projektsablonokat.

  • (18) Microsoft.NETCore.App.Runtime.<rid>/<runtime verzió,Microsoft.AspNetCore.App.Runtime>.<rid>/<aspnetcore verzió> Ezek a fájlok lehetővé teszik önálló alkalmazások létrehozását. Ezek a könyvtárak a (2), (5) és (6) fájlokra mutató szimbolikus hivatkozásokat tartalmaznak.

A megjelölt (*) mappákat több csomag használja. Egyes csomagformátumok (például rpm) speciálisan kezelik az ilyen mappákat. Erről a csomagfenntartónak kell gondoskodnia.

A .NET-verziószámozás a futtatókörnyezeti összetevő [major].[minor] verziószámán alapul. Az SDK-verzió ugyanazt [major].[minor] használja, és független [patch] , amely egyesíti az SDK funkció- és javításszemanikáját. Például: Az SDK 7.0.302-es verziója a 7.0-s futtatókörnyezetet támogató SDK harmadik funkciókiadásának második patch kiadása. A verziószámozás működésével kapcsolatos további információkért tekintse meg a .NET-verziószámozás áttekintését.

Egyes csomagok a verziószám egy részét tartalmazzák a nevükben. Ez lehetővé teszi egy adott verzió telepítését. A többi verzió nem szerepel a verziónévben. Ez lehetővé teszi, hogy az operációsrendszer-csomagkezelő frissítse a csomagokat (például automatikusan telepítse a biztonsági javításokat). A támogatott csomagkezelők Linux-specifikusak.

Az alábbiakban az ajánlott csomagokat soroljuk fel:

  • dotnet-sdk-[major].[minor] - Telepíti a legújabb SDK-t adott futtatókörnyezethez

    • Verzió:<sdk verzió>
    • Példa: dotnet-sdk-7.0
    • Tartalmazza: (3),(4),(18)
    • Függőségek: 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] – Egy adott ASP.NET Core-futtatókörnyezet telepítése

    • Verzió:<aspnetcore futtatókörnyezet verziója>
    • Példa: aspnetcore-runtime-7.0
    • Tartalmazza: (6)
    • Függőségek: dotnet-runtime-[major].[minor]
  • dotnet-runtime-deps-[major].[minor](Nem kötelező) – Telepíti az önálló alkalmazások futtatásához szükséges függőségeket

    • Verzió:<futtatókörnyezet verziója>
    • Példa: dotnet-runtime-deps-7.0
    • Függőségek: disztribúcióspecifikus függőségek
  • dotnet-runtime-[major].[minor] – Egy adott futtatókörnyezet telepítése

    • Verzió:<futtatókörnyezet verziója>
    • Példa: dotnet-runtime-7.0
    • Tartalmazza: (5)
    • Függőségek: dotnet-hostfxr-[major].[minor], dotnet-runtime-deps-[major].[minor]
  • dotnet-hostfxr-[major].[minor] -függőség

    • Verzió:<futtatókörnyezet verziója>
    • Példa: dotnet-hostfxr-7.0
    • Tartalmazza: (2)
    • Függőségek: dotnet-host
  • dotnet-host -függőség

    • Verzió:<futtatókörnyezet verziója>
    • Példa: dotnet-host
    • Tartalmazza: (1),(8),(9),(10),(16)
  • dotnet-apphost-pack-[major].[minor] -függőség

    • Verzió:<futtatókörnyezet verziója>
    • Tartalmazza: (13)
  • dotnet-targeting-pack-[major].[minor] – Lehetővé teszi a nem legújabb futtatókörnyezetek célzását

    • Verzió:<futtatókörnyezet verziója>
    • Tartalmazza: (12)
  • aspnetcore-targeting-pack-[major].[minor] – Lehetővé teszi a nem legújabb futtatókörnyezetek célzását

    • Verzió:<aspnetcore futtatókörnyezet verziója>
    • Tartalmazza: (11)
  • netstandard-targeting-pack-[netstandard_major].[netstandard_minor] - Lehetővé teszi a netstandard verzió célzását

    • Verzió:<sdk verzió>
    • Tartalmazza: (15)
  • dotnet-templates-[major].[minor]

    • Verzió:<sdk verzió>
    • Tartalmazza: (17)

Az alábbi két metacsomag nem kötelező. Értéket adnak a végfelhasználók számára, mivel elvonják a legfelső szintű csomagot (dotnet-sdk), ami leegyszerűsíti a .NET-csomagok teljes készletének telepítését. Ezek a metacsomagok egy adott .NET SDK-verzióra hivatkoznak.

  • dotnet[major] – Telepíti a megadott SDK-verziót

    • Verzió:<sdk verzió>
    • Példa: dotnet7
    • Függőségek: dotnet-sdk-[major].[minor]
  • dotnet – A disztribúciók által meghatározott SDK-verziót telepíti elsődleges verzióként – általában a legújabb elérhető verziót

    • Verzió:<sdk verzió>
    • Példa: dotnet
    • Függőségek: dotnet-sdk-[major].[minor]

Ehhez dotnet-runtime-deps-[major].[minor] ismernie kell a disztribúcióspecifikus függőségeket. Mivel a disztribúciós buildrendszer automatikusan le tudja ezt származtatni, a csomag nem kötelező, ebben az esetben ezek a függőségek közvetlenül a dotnet-runtime-[major].[minor] csomaghoz lesznek hozzáadva.

Ha a csomag tartalma verziószámozott mappa alatt van, a csomag neve [major].[minor] megegyezik a verziószámozott mappa nevével. Ez a netstandard-targeting-pack-[netstandard_major].[netstandard_minor].NET-verzió kivételével minden csomag esetében megegyezik.

A csomagok közötti függőségeknek a verziókövetelménynél egyenlőnek vagy nagyobbnak kell lennie. Ehhez például dotnet-sdk-7.0:7.0.401 szükséges aspnetcore-runtime-7.0 >= 7.0.6. Ez lehetővé teszi, hogy a felhasználó egy gyökércsomagon (például dnf update dotnet-sdk-7.0) frissítse a telepítést.

A legtöbb disztribúcióhoz az összes összetevőt forrásból kell létrehozni. Ez hatással van a csomagokra:

  • A harmadik shared/Microsoft.AspNetCore.All féltől származó kódtárak nem hozhatók létre könnyen a forrásból. Így a mappa ki van hagyva a aspnetcore-runtime csomagból.

  • A NuGetFallbackFolder rendszer a következőből származó nuget.orgbináris összetevőkkel tölti ki: . Üresnek kell maradnia.

Több dotnet-sdk csomag is ugyanazokat a fájlokat biztosíthatja a NuGetFallbackFolder. A csomagkezelővel kapcsolatos problémák elkerülése érdekében ezeknek a fájloknak azonosnak kell lenniük (ellenőrzőösszeg, módosítás dátuma stb.).

Csomagok hibakeresése

A hibakeresési tartalmakat olyan hibakeresési nevű csomagokba kell csomagolni, amelyek a cikkben korábban ismertetett .NET-csomagok felosztását követik. A csomag hibakeresési dotnet-sdk-[major].[minor] tartalmának például szerepelnie kell egy nevesített dotnet-sdk-dbg-[major].[minor]csomagban. A hibakeresési tartalmat a bináris fájlokkal megegyező helyre kell telepítenie.

Íme néhány bináris példa:

A címtárban {dotnet_root}/sdk/<sdk version> a következő két fájl várható:

  • dotnet.dll - csomaggal dotnet-sdk-[major].[minor] telepítve
  • dotnet.pdb - csomaggal dotnet-sdk-dbg-[major].[minor] telepítve

A címtárban {dotnet_root}/shared/Microsoft.NETCore.App/<runtime version> a következő két fájl várható:

  • System.Text.Json.dll - csomaggal dotnet-runtime-[major].[minor] telepítve
  • System.Text.Json.pdb - csomaggal dotnet-runtime-dbg-[major].[minor] telepítve

A címtárban {dotnet_root/shared/Microsoft.AspNetCore.App/<aspnetcore version> a következő két fájl várható:

  • Microsoft.AspNetCore.Routing.dll - csomagokkal aspnetcore-runtime-[major].[minor] telepítve
  • Microsoft.AspNetCore.Routing.pdb - csomagokkal aspnetcore-runtime-dbg-[major].[minor] telepítve

A .NET 8.0-tól kezdve a forrás buildelése által létrehozott összes .NET-hibakeresési tartalom (PDB-fájl) elérhető egy tarballban dotnet-symbols-sdk-<version>-<rid>.tar.gz. Ez az archívum a .NET SDK tarball könyvtárszerkezetének megfelelő alkönyvtárakban lévő PDF-fájlokat tartalmaz . dotnet-sdk-<version>-<rid>.tar.gz

Bár az összes hibakeresési tartalom elérhető a hibakeresési tarballban, nem minden hibakeresési tartalom ugyanolyan fontos. A végfelhasználókat leginkább a könyvtárak és shared/Microsoft.NETCore.App/<runtime version> a shared/Microsoft.AspNetCore.App/<aspnetcore version> tartalom érdekli.

A alatta lévő sdk/<sdk version> SDK-tartalom hasznos a .NET SDK-eszközkészletek hibakereséséhez.

Az alábbi csomagok a javasolt hibakeresési csomagok:

  • aspnetcore-runtime-dbg-[major].[minor] – Hibakeresési tartalmak telepítése egy adott ASP.NET Core-futtatókörnyezethez

    • Verzió:<aspnetcore futtatókörnyezet verziója>
    • Példa: aspnetcore-runtime-dbg-8.0
    • Tartalmazza: a(z) (6) tartalom hibakeresése
    • Függőségek: aspnetcore-runtime-[major].[minor]
  • dotnet-runtime-dbg-[major].[minor] – Egy adott futtatókörnyezetben hibakeresési tartalmat telepít

    • Verzió:<futtatókörnyezet verziója>
    • Példa: dotnet-runtime-dbg-8.0
    • Tartalmazza: tartalom hibakeresése a következőhöz: (5)
    • Függőségek: dotnet-runtime-[major].[minor]

Az alábbi hibakeresési csomag nem kötelező:

  • dotnet-sdk-dbg-[major].[minor] – Telepíti a hibakeresési tartalmat egy adott SDK-verzióhoz
    • Verzió:<sdk verzió>
    • Példa: dotnet-sdk-dbg-8.0
    • Tartalmazza: tartalom hibakeresése a következőhöz: (3),(4),(18)
    • Függőségek: dotnet-sdk-[major].[minor]

A hibakeresési tarball tartalmaz néhány hibakeresési tartalmat packsis, amelyek alatt a tartalom sharedmásolatai láthatók. A .NET-elrendezésben a packs könyvtár a .NET-alkalmazások létrehozásához használatos. Nincsenek hibakeresési forgatókönyvek, ezért ne csomagolja be a hibakeresési tartalmat packs a hibakeresési tarballba.

Csomagok készítése

A dotnet/source-build adattár útmutatást nyújt a .NET SDK és annak összes összetevőjének forrás tarballjának létrehozásához. A forrás-build adattár kimenete megegyezik a cikk első szakaszában ismertetett elrendezésével.