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>]
[--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:
- 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 -o
PublishDir
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=true
a 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:
- MSBuild parancssori referencia
- Visual Studio közzétételi profilok (.pubxml) ASP.NET Core-alkalmazások üzembe helyezéséhez
- dotnet msbuild
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őrewin-x86
van 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.
--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 Output Layout. 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 konfigurációt használja azokhoz a
Release
projektekhez, amelyeknek a TargetFramework értékenet8.0
vagy egy újabb verzió. Az alapértelmezett buildkonfiguráció azDebug
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 egyikPropertyGroup
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 projektekpublish
közzétételi kimenetét példáuldotnet 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őrelinux-x64
van 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, akkorfalse
az alapértelmezett érték.true
Ebben az esetben ne helyezze a megoldást vagy a projekt argumentumot közvetlenül utána--self-contained
, merttrue
ebben a helyzetben várható vagyfalse
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óraRuntimeIdentifier
az egyik gépe alapján. Ez implicit módon történik olyan tulajdonságok esetében, amelyekhezRuntimeIdentifier
példáulSelfContained
,PublishAot
, ,PublishSelfContained
PublishSingleFile
ésPublishReadyToRun
. 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]
ésdiag[nostic]
. Az alapértelmezett értékminimal
. 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 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
- A .NET-alkalmazások közzétételi áttekintése
- .NET-alkalmazások közzététele a .NET parancssori felülettel
- Cél-keretrendszerek
- Futtatókörnyezet-azonosító (RID) katalógusa
- .NET-alkalmazás tárolóba helyezése dotnet-közzététellel
- A macOS Catalina notarization használata
- Közzétett alkalmazás címtárstruktúrája
- MSBuild parancssori referencia
- Visual Studio közzétételi profilok (.pubxml) ASP.NET Core-alkalmazások üzembe helyezéséhez
- dotnet msbuild
- Önálló üzemelő példányok vágása