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 publish
kimeneté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ó:
- MSBuild parancssori referencia
- Visual Studio közzétételi profiljai (.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.
É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 RIDwin-x86
lesz. 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ásanet8.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 projektmappamyproject , é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 helyezimyproject/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 egyikPropertyGroup
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 msbuildPublishDir
tulajdonság használatával adjon meg egy relatív elérési utat az egyes projektekhez. Példáuldotnet publish -p:PublishDir=.\publish
minden projekt közzétételi kimenetét a projektfájlt tartalmazó mappa alattipublish
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 RIDlinux-x64
lesz. 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
vagyfalse
megadása nélkül használja, az alapértelmezett értéktrue
. Ebben az esetben ne tegye közvetlenül a megoldás vagy a projekt argumentumát--self-contained
után, mert ebben a helyzetbentrue
vagyfalse
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 aRuntimeIdentifier
igénylő tulajdonságok esetében , 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ék aminimal
. 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:
- .NET-alkalmazások közzétételi áttekintése
- .NET-alkalmazások közzététele a .NET CLI-
- Cél-keretrendszerek
- futtatókörnyezet-azonosító (RID) katalógus
- .NET-alkalmazás tárolóba helyezése dotnet közzétételi
- macOS Catalina Notarization
- közzétett alkalmazás címtárstruktúrája
- MSBuild parancssori referencia
- Visual Studio közzétételi profiljai (.pubxml) ASP.NET Core-alkalmazások üzembe helyezéséhez
- dotnet msbuild
- Önálló üzemelő példányok vágása