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


dotnet publish

Ez a cikk a következőre vonatkozik: ✔️ .NET Core 3.1 SDK és újabb verziók

Név

dotnet publish – Közzéteszi az alkalmazást és függőségeit egy olyan mappában, amely üzembe helyez egy üzemeltetési rendszert.

Áttekintés

dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
    [--artifacts-path <ARTIFACTS_DIR>]
    [-c|--configuration <CONFIGURATION>] [--disable-build-servers]
    [-f|--framework <FRAMEWORK>] [--force] [--interactive]
    [--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
    [--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
    [--os <OS>] [-r|--runtime <RUNTIME_IDENTIFIER>]
    [--sc|--self-contained [true|false]] [--no-self-contained]
    [-s|--source <SOURCE>] [--tl:[auto|on|off]]
    [--use-current-runtime, --ucr [true|false]]
    [-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]

dotnet publish -h|--help

Leírás

dotnet publish lefordítja az alkalmazást, beolvassa a projektfájlban megadott függőségeit, és közzéteszi az eredményként kapott fájlkészletet egy könyvtárban. A kimenet a következő eszközöket tartalmazza:

  • Köztes nyelv (IL) kód egy dll kiterjesztéssel rendelkező szerelvényben.
  • Egy .deps.json fájl, amely tartalmazza a projekt összes függőségét.
  • Egy .runtimeconfig.json fájl, amely meghatározza az alkalmazás által várt megosztott futtatókörnyezetet, valamint a futtatókörnyezet egyéb konfigurációs beállításait (például szemétgyűjtés típusát).
  • Az alkalmazás függőségei, amelyek a NuGet-gyorsítótárból a kimeneti mappába lesznek másolva.

A dotnet publish parancs kimenete készen áll egy üzemeltetési rendszerre (például kiszolgálóra, PC-re, Macre, laptopra) való üzembe helyezésre a végrehajtáshoz. Ez az egyetlen hivatalosan támogatott módja az alkalmazás központi telepítésre való előkészítésének. A projekt által megadott üzembe helyezés típusától függően előfordulhat, hogy az üzemeltetési rendszer telepítette a .NET megosztott futtatókörnyezetét. További információ: .NET-alkalmazások közzététele a .NET CLI.

Implicit visszaállítás

Nem kell futtatnia dotnet restore, mert az összes olyan parancs implicit módon fut, amely visszaállítást igényel, például dotnet new, dotnet build, dotnet run, dotnet test, dotnet publishés dotnet pack. Az implicit visszaállítás letiltásához használja a --no-restore lehetőséget.

A dotnet restore parancs továbbra is hasznos bizonyos esetekben, amikor a explicit visszaállításnak van értelme, például folyamatos integrációs buildeket az Azure DevOps Services vagy olyan buildrendszerekben, amelyeknek explicit módon kell szabályozni a visszaállítást.

További információ a NuGet-hírcsatornák kezeléséről: dotnet restore dokumentáció.

MSBuild

A dotnet publish parancs meghívja az MSBuild parancsot, amely meghívja a Publish célt. Ha a IsPublishable tulajdonság egy adott projekthez false, a Publish-cél nem hívható meg, és a dotnet publish parancs csak az implicit dotnet-visszaállítási futtatja a projekten.

A dotnet publish átadott paraméterek az MSBuildnek lesznek átadva. A -c és -o paraméterek az MSBuild Configuration és PublishDir tulajdonságaira vannak leképezve.

A dotnet publish parancs elfogadja az MSBuild beállításait, például -p a tulajdonságok beállításához, és -l a naplózó definiálásához. Beállíthatja például az MSBuild tulajdonságot a következő formátummal: -p:<NAME>=<VALUE>.

.pubxml-fájlok

A közzétételhez kapcsolódó tulajdonságokat egy .pubxml fájlra hivatkozva is beállíthatja. Például:

dotnet publish -p:PublishProfile=FolderProfile

Az előző példa a FolderProfile.pubxml fájlt használja, amely a <project_folder>/Properties/PublishProfiles mappában található. Ha egy elérési utat és fájlkiterjesztést ad meg a PublishProfile tulajdonság beállításakor, a rendszer figyelmen kívül hagyja őket. Az MSBuild alapértelmezés szerint a Properties/PublishProfiles mappában jelenik meg, és feltételezi a pubxml fájlkiterjesztést. A kiterjesztést is tartalmazó elérési út és fájlnév megadásához állítsa be a PublishProfileFullPath tulajdonságot a PublishProfile tulajdonság helyett.

A .pubxml fájlban:

  • PublishUrl a Visual Studio a Közzétételi cél megjelölésére használja.
  • PublishDir a parancssori felület a közzétételi cél megjelölésére használja.

Ha azt szeretné, hogy a forgatókönyv minden helyen működjön, mindkét tulajdonságot inicializálhatja ugyanarra az értékre a .pubxml fájlban. Ha a GitHub dotnet/sdk#20931 megoldódott, csak az egyik tulajdonságot kell beállítani.

A .pubxml fájl egyes tulajdonságait csak a Visual Studio tartja tiszteletben, és nincs hatással a dotnet publish. Dolgozunk azon, hogy a parancssori felület jobban igazodjon a Visual Studio viselkedéséhez. A parancssori felület azonban soha nem használ bizonyos tulajdonságokat. A CLI és a Visual Studio egyaránt a közzététel csomagolási aspektusát hajtja végre, és dotnet/sdk#29817 további, ehhez kapcsolódó tulajdonságok támogatását tervezi. A parancssori felület azonban nem teszi lehetővé a közzététel üzembe helyezésének automatizálását, és az ahhoz kapcsolódó tulajdonságok nem támogatottak. A dotnet publish által nem támogatott .pubxml tulajdonságok a következők, amelyek hatással vannak a buildre:

  • LastUsedBuildConfiguration
  • Configuration
  • Platform
  • LastUsedPlatform
  • TargetFramework
  • TargetFrameworks
  • RuntimeIdentifier
  • RuntimeIdentifiers

MSBuild tulajdonságok

Az alábbi MSBuild tulajdonságok megváltoztatják a dotnet publishkimenetét.

  • PublishReadyToRun

    Az alkalmazásszerelvényeket ReadyToRun (R2R) formátumban fordítja le. Az R2R az idő előtti fordítás (AOT) egyik formája. További információ: ReadyToRun-rendszerképek.

    Ha olyan hiányzó függőségekre vonatkozó figyelmeztetéseket szeretne látni, amelyek futásidejű hibákat okozhatnak, használja a PublishReadyToRunShowWarnings=true.

    Javasoljuk, hogy ne a parancssorban, hanem egy közzétételi profilban adja meg a PublishReadyToRun.

  • PublishSingleFile

    Az alkalmazást egy platformspecifikus egyfájlos végrehajtható fájlba csomagolja. Az egyfájlos közzétételről további információt az egyfájlos csomagköteg-terveződokumentum.

    Javasoljuk, hogy ezt a beállítást a projektfájlban adja meg a parancssor helyett.

  • PublishTrimmed

    Levágja a nem használt kódtárakat, hogy csökkentse az alkalmazások üzembe helyezésének méretét egy önálló végrehajtható fájl közzétételekor. További információ: Önálló telepítések és végrehajtható fájlok vágása. A .NET 6 SDK óta érhető el.

    Javasoljuk, hogy ezt a beállítást a projektfájlban adja meg a parancssor helyett.

További információ:

Számítási feladatjegyzék letöltése

A parancs futtatásakor a rendszer elindítja a számítási feladatok hirdetési jegyzékeinek aszinkron háttérletöltését. Ha a letöltés a parancs befejeződésekor is fut, a letöltés leáll. További információ: Hirdetési jegyzékek.

Érvek

  • PROJECT|SOLUTION

    A közzéteendő projekt vagy megoldás.

    • PROJECT egy C#, F# vagy Visual Basic projektfájl elérési útja és fájlneve, vagy egy C#, F# vagy Visual Basic projektfájlt tartalmazó könyvtár elérési útja. Ha a címtár nincs megadva, az alapértelmezés szerint az aktuális könyvtár lesz.

    • SOLUTION egy megoldásfájl elérési útja és fájlneve (.sln kiterjesztés), vagy egy megoldásfájlt tartalmazó könyvtár elérési útja. Ha a címtár nincs megadva, az alapértelmezés szerint az aktuális könyvtár lesz.

Beállítások

  • -a|--arch <ARCHITECTURE>

    A célarchitektúra megadása. Ez a rövidített szintaxis a futtatókörnyezet-azonosító (RID)beállítására szolgál, ahol a megadott érték az alapértelmezett RID-vel van kombinálva. Egy win-x64 gépen például a --arch x86 megadásával a RID win-x86lesz. Ha ezt a lehetőséget használja, ne használja a -r|--runtime lehetőséget. Elérhető a .NET 6 7. előzetes verziója óta.

  • --artifacts-path <ARTIFACTS_DIR>

    A végrehajtott parancs összes buildkimeneti fájlja a megadott elérési út alatti almappákba kerül, projekt szerint elválasztva. További információ: Artifacts Kimeneti elrendezés. A .NET 8 SDK óta érhető el.

  • -c|--configuration <CONFIGURATION>

    Meghatározza a buildkonfigurációt. Ha a .NET 8 SDK-val vagy egy újabb verzióval fejleszt, a parancs alapértelmezés szerint a Release konfigurációt használja azokhoz a projektekhez, amelyeknek a TargetFramework beállítása net8.0 vagy újabb verzióra van beállítva. Az alapértelmezett buildkonfiguráció Debug az SDK korábbi verzióihoz és a korábbi cél-keretrendszerekhez. Felülbírálhatja az alapértelmezett beállítást a projektbeállításokban vagy ezzel a beállítással. További információ: a "dotnet publish" kiadási konfigurációs és "dotnet pack" kiadási konfigurációshasznál.

  • --disable-build-servers

    Kényszeríti a parancsot az állandó buildkiszolgálók figyelmen kívül hagyására. Ez a beállítás konzisztens módot biztosít a buildek gyorsítótárazásának letiltására, ami az alapoktól kényszeríti a buildeket. A gyorsítótárakra nem támaszkodó buildek akkor hasznosak, ha a gyorsítótárak valamilyen okból sérültek vagy helytelenek. A .NET 7 SDK óta érhető el.

  • -f|--framework <FRAMEWORK>

    Közzéteszi az alkalmazást a megadott cél-keretrendszer. Meg kell adnia a cél keretrendszert a projektfájlban.

  • --force

    Minden függőséget feloldani kell, még akkor is, ha az utolsó visszaállítás sikeres volt. A jelölő megadása megegyezik a project.assets.json fájl törlésével.

  • -?|-h|--help

    A parancs használatának leírását nyomtatja ki.

  • --interactive

    Lehetővé teszi, hogy a parancs leálljon, és várja meg a felhasználói bemenetet vagy műveletet. Például a hitelesítés befejezéséhez. A .NET Core 3.0 SDK óta érhető el.

  • --manifest <PATH_TO_MANIFEST_FILE>

    Egy vagy több céljegyzéket határoz meg, az alkalmazással közzétett csomagok levágásához. A jegyzékfájl a dotnet store parancskimenetének része. Több jegyzékfájl megadásához adjon hozzá egy --manifest beállítást minden jegyzékfájlhoz.

  • --no-build

    Nem hozza létre a projektet közzététel előtt. Implicit módon beállítja a --no-restore jelzőt is.

  • --no-dependencies

    Figyelmen kívül hagyja a projektről projektre mutató hivatkozásokat, és csak a gyökérprojektet állítja vissza.

  • --nologo

    Nem jelenik meg az indítási szalagcím vagy a szerzői jogi üzenet.

  • --no-restore

    Nem hajt végre implicit visszaállítást a parancs futtatásakor.

  • -o|--output <OUTPUT_DIRECTORY>

    Megadja a kimeneti könyvtár elérési útját.

    Ha nincs megadva, alapértelmezés szerint a [project_file_folder]/bin/[configuration]/[framework]/publish/ keretrendszerfüggő végrehajtható és platformfüggetlen bináris fájlokhoz. Alapértelmezés szerint [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ egy önálló végrehajtható fájlhoz.

    Webes projektben, ha a kimeneti mappa a projektmappában található, az egymást követő dotnet publish parancsok beágyazott kimeneti mappákat eredményeznek. Ha például a projektmappa myproject, és a közzétételi kimeneti mappa a myproject/publish, és kétszer futtatja a , a második futtatás a .config és .json fájlokat helyezi myproject/publish/publish. A közzétételi mappák beágyazásának elkerülése érdekében adjon meg egy olyan közzétételi mappát, amely nem közvetlenül a projektmappában, vagy zárja ki a közzétételi mappát a projektből. Az publishoutputnevű közzétételi mappa kizárásához adja hozzá a következő elemet a .csproj fájl egyik PropertyGroup eleméhez:

    <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
    
    • .NET 7.0.200 SDK és újabb verziók

      Ha a --output beállítást adja meg, amikor ezt a parancsot egy megoldáson futtatja, a parancssori felület figyelmeztetést küld (7.0.200-ban hiba) a kimeneti útvonal nem egyértelmű szemantikája miatt. A --output beállítás nem engedélyezett, mert az összes beépített projekt kimenete a megadott könyvtárba lesz másolva, amely nem kompatibilis a többcélú projektekkel, valamint a közvetlen és tranzitív függőségek különböző verzióival rendelkező projektekhez. További információ: Megoldásszintű --output beállítás már nem érvényes a buildel kapcsolatos parancsokra.

    • .NET Core 3.x SDK és újabb verziók

      Ha egy projekt közzétételekor relatív elérési utat ad meg, a létrehozott kimeneti könyvtár az aktuális munkakönyvtárhoz képest van, nem pedig a projektfájl helyéhez.

      Ha relatív elérési utat ad meg egy megoldás közzétételekor, az összes projekt kimenete a megadott mappába kerül az aktuális munkakönyvtárhoz képest. Ha közzé szeretné tenni a kimenetet, a --output beállítás helyett az msbuild PublishDir tulajdonság használatával adjon meg egy relatív elérési utat az egyes projektekhez. Például dotnet publish -p:PublishDir=.\publish minden projekt közzétételi kimenetét a projektfájlt tartalmazó mappa alatti publish mappába küldi.

    • .NET Core 2.x SDK

      Ha egy projekt közzétételekor relatív elérési utat ad meg, a létrehozott kimeneti könyvtár a projektfájl helyéhez, nem pedig az aktuális munkakönyvtárhoz van viszonyítva.

      Ha relatív elérési utat ad meg egy megoldás közzétételekor, minden projekt kimenete egy külön mappába kerül a projektfájl helyéhez képest. Ha egy megoldás közzétételekor abszolút elérési utat ad meg, az összes projekt összes közzétételi kimenete a megadott mappába kerül.

  • --os <OS>

    A cél operációs rendszer (OS) megadása. Ez a rövidített szintaxis a futtatókörnyezet-azonosító (RID)beállítására szolgál, ahol a megadott érték az alapértelmezett RID-vel van kombinálva. Egy win-x64 gépen például a --os linux megadásával a RID linux-x64lesz. Ha ezt a lehetőséget használja, ne használja a -r|--runtime lehetőséget. A .NET 6 óta érhető el.

  • --sc|--self-contained [true|false]

    Közzéteszi a .NET-futtatókörnyezetet az alkalmazással, hogy a futtatókörnyezetet ne kelljen telepíteni a célgépre. Az alapértelmezett érték true, ha futásidejű azonosító van megadva, és a projekt végrehajtható projekt (nem kódtárprojekt). További információ: .NET-alkalmazások közzétételi és .NET-alkalmazások közzététele a .NET CLI-.

    Ha ezt a beállítást true vagy falsemegadása nélkül használja, az alapértelmezett érték true. Ebben az esetben ne tegye közvetlenül a megoldás vagy a projekt argumentumát --self-containedután, mert ebben a helyzetben true vagy false várható.

  • --no-self-contained

    Egyenértékű --self-contained false.

  • --source <SOURCE>

    A Visszaállítási művelet során használni kívánt NuGet-csomagforrás URI-ja.

  • -r|--runtime <RUNTIME_IDENTIFIER>

    Közzéteszi az alkalmazást egy adott futtatókörnyezethez. A futtatókörnyezet-azonosítók (RID-k) listáját a RID-katalógusban. További információ: .NET-alkalmazások közzétételi és .NET-alkalmazások közzététele a .NET CLI-. Ha ezt a lehetőséget használja, használja --self-contained vagy --no-self-contained is.

  • --tl:[auto|on|off]

    Megadja, hogy a terminálnaplózó kell-e használni a buildkimenethez. Az alapértelmezett érték a auto, amely először ellenőrzi a környezetet a terminálnaplózás engedélyezése előtt. A környezet ellenőrzi, hogy a terminál képes-e modern kimeneti funkciókat használni, és nem használ átirányított szabványos kimenetet az új naplózó engedélyezése előtt. on kihagyja a környezetellenőrzést, és engedélyezi a terminálnaplózást. off kihagyja a környezetellenőrzést, és az alapértelmezett konzolnaplózót használja.

    A terminálnaplózó megjeleníti a visszaállítási fázist, majd a buildelési fázist. Az egyes fázisok során az éppen épülő projektek a terminál alján jelennek meg. Az épület összes projektje az MSBuild-célt és a célra fordított időt is kimeneteli. Ebben az információban további információt talál a buildről. Amikor egy projekt befejeződött, egyetlen "befejezett build" szakasz lesz megírva, amely rögzíti a következőt:

    • Az épített projekt neve.
    • A cél-keretrendszer (ha több-célzott).
    • A build állapota.
    • A build elsődleges kimenete (amely hivatkozásra van hivatkozva).
    • A projekthez létrehozott diagnosztikák.

    Ez a beállítás a .NET 8-tól érhető el.

  • --use-current-runtime, --ucr [true|false]

    Beállítja a RuntimeIdentifier egy platformon hordozható RuntimeIdentifier az egyik gép alapján. Ez implicit módon történik a RuntimeIdentifierigénylő tulajdonságok esetében , például SelfContained, PublishAot, PublishSelfContained, PublishSingleFileés PublishReadyToRun. Ha a tulajdonság értéke hamis, az implicit feloldás már nem fog bekövetkezni.

  • -v|--verbosity <LEVEL>

    A parancs részletességi szintjét állítja be. Az engedélyezett értékek a következők: q[uiet], m[inimal], n[ormal], d[etailed]és diag[nostic]. Az alapértelmezett érték a minimal. További információ: LoggerVerbosity.

  • --version-suffix <VERSION_SUFFIX>

    Meghatározza a verzió utótagját a projektfájl verzió mezőjében lévő csillag (*) helyére.

Példák

  • Hozzon létre egy keretrendszerfüggő, platformfüggetlen bináris a projekthez az aktuális könyvtárban:

    dotnet publish
    

    A .NET Core 3.0 SDK-tól kezdve ez a példa egy keretrendszerfüggő végrehajtható is létrehoz az aktuális platformhoz.

  • Hozzon létre egy önálló végrehajtható az aktuális könyvtárban lévő projekthez egy adott futtatókörnyezethez:

    dotnet publish --runtime osx-x64
    

    A RID-nek a projektfájlban kell lennie.

  • Hozzon létre egy keretrendszerfüggő végrehajtható az aktuális könyvtárban lévő projekthez egy adott platformhoz:

    dotnet publish --runtime osx-x64 --self-contained false
    

    A RID-nek a projektfájlban kell lennie. Ez a példa a .NET Core 3.0 SDK és újabb verziókra vonatkozik.

  • Tegye közzé a projektet az aktuális könyvtárban egy adott futtatókörnyezethez és célkerethez:

    dotnet publish --framework net8.0 --runtime osx-x64
    
  • Tegye közzé a megadott projektfájlt:

    dotnet publish ~/projects/app1/app1.csproj
    
  • Tegye közzé az aktuális alkalmazást, de ne állítsa vissza a projektről projektre (P2P) vonatkozó hivatkozásokat, csak a gyökérprojektet a visszaállítási művelet során:

    dotnet publish --no-dependencies
    

Lásd még: