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 annak függőségeit egy mappában, ahol üzembe helyezheti azokat egy üzemeltetési rendszerben.

Szinopszis

dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
    [-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:

  • Intermediate Language (IL) kód egy dll-kiterjesztéssel rendelkező szerelvényben.
  • Egy .deps.json fájl, amely a projekt összes függőségét tartalmazza.
  • 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-vel.

Implicit visszaállítás

Nem kell futtatnia dotnet restore , mert implicit módon fut minden olyan parancs, 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 buildek az Azure DevOps Servicesben vagy olyan buildrendszerekben, amelyeknek explicit módon kell szabályozni a visszaállítást.

A NuGet-hírcsatornák kezelésével kapcsolatos információkért tekintse meg a dokumentációtdotnet restore.

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 van beállítva, a Publish cél nem hívható meg, és a dotnet publish parancs csak az implicit dotnet-visszaállítást futtatja a projekten.

Az átadott dotnet publish paraméterek az MSBuildnek lesznek átadva. Az -c MSBuild Configuration és -oPublishDir a tulajdonságok és a paraméterek megfeleltetése.

A dotnet publish parancs elfogadja az MSBuild beállításait, például -p a tulajdonságok beállítását és -l egy 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élda:

dotnet publish -p:PublishProfile=FolderProfile

Az előző példa a project_folder>/Properties/PublishProfiles mappában <található FolderProfile.pubxml fájlt használja. 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 Tulajdonságok/PublishProfiles mappában jelenik meg, és feltételezi a pubxml fájlkiterjesztést. A bővítményt 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 a .pubxml fájl azonos értékére. Ha a GitHub dotnet/sdk#20931 számú problémája 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 fájlradotnet 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, a dotnet/sdk#29817 pedig 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 leginkább figyelemre méltó .pubxml tulajdonságok, amelyeket nem támogatnak dotnet publish 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 kimenetét dotnet publish.

  • 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-képek.

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

    Azt javasoljuk, hogy ne a parancssorban, hanem egy közzétételi profilban adja meg 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ődokumentumban talál.

    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ókat találhat az alábbi forrásokban:

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.

Argumentumok

  • PROJECT|SOLUTION

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

    • PROJECT 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 a 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 egy rövidített szintaxis a futtatókörnyezet azonosítójának (RID) beállításához, ahol a megadott érték az alapértelmezett RID-vel van kombinálva. Egy gépen például win-x64 a RID beállítása a következőre win-x86van adva--arch x86: . Ha ezt a lehetőséget használja, ne használja a -r|--runtime beállítást. Elérhető a .NET 6 7. előzetes verziója óta.

  • -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 konfigurációt használja azokhoz a Release projektekhez, amelyeknek a TargetFramework értéke net8.0 vagy egy újabb verzió. Az alapértelmezett buildkonfiguráció az Debug SDK korábbi verzióihoz és a korábbi cél-keretrendszerekhez tartozik. 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ó: "dotnet publish" uses Release configuration and dotnet pack and dotnet pack uses Release configuration.

  • --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-keretrendszerhez. 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 parancs kimenetének dotnet store része. Ha több jegyzékfájlt szeretne megadni, adjon meg egy --manifest beállítást az egyes jegyzékekhez.

  • --no-build

    Nem hozza létre a projektet közzététel előtt. Implicit módon beállítja a jelölőt --no-restore 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/ értékre kerül a keretrendszertől függő végrehajtható és platformfüggetlen bináris fájlok esetében. Alapértelmezés szerint a [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ for a self-contained végrehajtható.

    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 a myproject, és a közzétételi kimeneti mappa a myproject/publish, és kétszer futdotnet publish, a második futtatás a tartalomfájlokat, például a .config és .json fájlokat helyezi el a myproject/publish/publish fájlban. 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 van, vagy zárja ki a közzétételi mappát a projektből. A publishoutput nevű 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 ezt a --output 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öbb célzott projekttel, valamint a közvetlen és tranzitív függőségek különböző verzióival rendelkező projektekkel. További információ: A 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, az egyes projektek külön mappáiban adja meg a relatív elérési utat az msbuild PublishDir tulajdonság használatával a --output beállítás helyett. Az egyes projektek publish közzétételi kimenetét például dotnet publish -p:PublishDir=.\publish a projektfájlt tartalmazó 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 egy rövidített szintaxis a futtatókörnyezet azonosítójának (RID) beállításához, ahol a megadott érték az alapértelmezett RID-vel van kombinálva. Egy gépen például win-x64 a RID beállítása a következőre linux-x64van adva--os linux: . Ha ezt a lehetőséget használja, ne használja a -r|--runtime beállítást. 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 beállítás true , ha egy futtatókörnyezet-azonosító van megadva, és a projekt végrehajtható projekt (nem tárprojekt). További információ: .NET-alkalmazások közzététele és .NET-alkalmazások közzététele a .NET CLI-vel.

    Ha ezt a beállítást a rendszer a beállítás megadása true nélkül használja, akkor falseaz alapértelmezett érték.true Ebben az esetben ne helyezze a megoldást vagy a projekt argumentumot közvetlenül utána --self-contained, mert true ebben a helyzetben várható vagy false várható.

  • --no-self-contained

    Egyenértékű a --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 találja. További információ: .NET-alkalmazások közzététele és .NET-alkalmazások közzététele a .NET CLI-vel. 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ót kell-e használni a buildkimenethez. Az alapértelmezett érték az 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 platformot hordozhatóra RuntimeIdentifier az egyik gépe alapján. Ez implicit módon történik olyan tulajdonságok esetében, amelyekhez RuntimeIdentifierpéldául SelfContained, PublishAot, , PublishSelfContainedPublishSingleFileé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őkq[uiet]: , m[inimal], n[ormal]d[etailed]és diag[nostic]. Az alapértelmezett érték 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 fájlt 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ó fájlt is létrehoz az aktuális platformhoz.

  • Hozzon létre egy önálló végrehajtható fájlt a projekthez az aktuális könyvtárban 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ó fájlt a projekthez az aktuális könyvtárban, 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 netcoreapp3.1 --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