dotnet publish
Tento článek se vztahuje na: ✔️ .NET Core 3.1 SDK a novější verze
Název
dotnet publish
– Publikuje aplikaci a její závislosti do složky pro nasazení do hostitelského systému.
Synopse
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
Popis
dotnet publish
zkompiluje aplikaci, přečte její závislosti zadané v souboru projektu a publikuje výslednou sadu souborů do adresáře. Výstup zahrnuje následující prostředky:
- Kód IL (Intermediate Language) v sestavení s rozšířením knihovny DLL .
- Soubor .deps.json , který obsahuje všechny závislosti projektu.
- Soubor .runtimeconfig.json , který určuje sdílený modul runtime, který aplikace očekává, a také další možnosti konfigurace modulu runtime (například typ uvolňování paměti).
- Závislosti aplikace, které se zkopírují z mezipaměti NuGet do výstupní složky.
Výstup dotnet publish
příkazu je připravený k nasazení do hostitelského systému (například serveru, počítače PC, Počítače Mac, přenosného počítače) ke spuštění. Je to jediný oficiálně podporovaný způsob přípravy aplikace na nasazení. V závislosti na typu nasazení, které projekt určuje, může hostitelský systém nebo nemusí mít na něm nainstalovaný sdílený modul runtime .NET. Další informace najdete v tématu Publikování aplikací .NET pomocí rozhraní příkazového řádku .NET.
Implicitní obnovení
Nemusíte spouštětdotnet restore
, protože se spouští implicitně všemi příkazy, které vyžadují obnovení, například dotnet new
, , dotnet build
, dotnet run
, dotnet test
dotnet publish
a dotnet pack
. Pokud chcete zakázat implicitní obnovení, použijte tuto --no-restore
možnost.
Příkaz dotnet restore
je stále užitečný v určitých scénářích, kdy explicitní obnovení dává smysl, například sestavení kontinuální integrace ve službě Azure DevOps Services nebo v systémech sestavení, které potřebují explicitně řídit, kdy dojde k obnovení.
Informace o správě informačních kanálů NuGet najdete v dotnet restore
dokumentaci.
MSBuild
Příkaz dotnet publish
volá nástroj MSBuild, který vyvolá Publish
cíl. IsPublishable
Pokud je vlastnost nastavena na false
konkrétní projekt, Publish
cíl nelze vyvolat a dotnet publish
příkaz spustí pouze implicitní obnovení dotnet v projektu.
Všechny předané dotnet publish
parametry jsou předány nástroji MSBuild. Parametry -c
a -o
parametry se mapuje na vlastnosti a PublishDir
vlastnosti nástroje MSBuildConfiguration
.
Příkaz dotnet publish
přijímá možnosti nástroje MSBuild, například -p
pro nastavení vlastností a -l
definování protokolovacího nástroje. Můžete například nastavit vlastnost MSBuild pomocí formátu: -p:<NAME>=<VALUE>
.
Soubory .pubxml
Vlastnosti související s publikováním můžete nastavit také odkazem na soubor .pubxml . Příklad:
dotnet publish -p:PublishProfile=FolderProfile
Předchozí příklad používá soubor FolderProfile.pubxml, který se nachází ve <složce project_folder>/Properties/PublishProfiles. Pokud při nastavování vlastnosti zadáte cestu a příponu PublishProfile
souboru, budou ignorovány. MsBuild ve výchozím nastavení hledá ve složce Properties/PublishProfiles a předpokládá příponu souboru pubxml . Chcete-li zadat cestu a název souboru včetně přípony, nastavte PublishProfileFullPath
vlastnost místo PublishProfile
vlastnosti.
V souboru .pubxml:
PublishUrl
používá Visual Studio k označení cíle publikování.PublishDir
rozhraní příkazového řádku slouží k označení cíle publikování.
Pokud chcete, aby scénář fungoval na všech místech, můžete obě tyto vlastnosti inicializovat na stejnou hodnotu v souboru .pubxml . Když se problém GitHubu dotnet/sdk#20931 vyřeší, bude potřeba nastavit jenom jednu z těchto vlastností.
Některé vlastnosti v souboru .pubxml jsou dodrženy pouze sadou Visual Studio a nemají žádný vliv na dotnet publish
. Pracujeme na tom, aby bylo rozhraní příkazového řádku více v souladu s chováním sady Visual Studio. Rozhraní příkazového řádku ale nebude nikdy používat některé vlastnosti. Rozhraní příkazového řádku i Visual Studio dělají aspekty publikování a plány dotnet/sdk#29817 a přidávají podporu dalších vlastností souvisejících s tím. Rozhraní příkazového řádku ale neprovádí aspekt automatizace nasazení publikování a vlastností souvisejících s tím, které nejsou podporované. Nejdůležitější vlastnosti .pubxml , které nejsou podporovány dotnet publish
, jsou následující vlastnosti, které ovlivňují sestavení:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
vlastnosti nástroje MSBuild
Následující vlastnosti nástroje MSBuild mění výstup souboru dotnet publish
.
PublishReadyToRun
Kompiluje sestavení aplikace jako formát ReadyToRun (R2R). R2R je forma předběžné kompilace (AOT). Další informace najdete v tématu ReadyToRun images.
Pokud chcete zobrazit upozornění týkající se chybějících závislostí, které by mohly způsobit selhání modulu runtime, použijte
PublishReadyToRunShowWarnings=true
.Doporučujeme, abyste místo příkazového řádku zadali
PublishReadyToRun
profil publikování v profilu publikování.PublishSingleFile
Zabalí aplikaci do spustitelného souboru specifického pro platformu. Další informace o publikování s jedním souborem najdete v návrhovém dokumentu s jedním souborem bundleru.
Tuto možnost doporučujeme zadat v souboru projektu, nikoli na příkazovém řádku.
PublishTrimmed
Oříznou nepoužívané knihovny, aby se snížila velikost nasazení aplikace při publikování samostatného spustitelného souboru. Další informace najdete v tématu Oříznutí samostatných nasazení a spustitelných souborů. K dispozici od sady .NET 6 SDK.
Tuto možnost doporučujeme zadat v souboru projektu, nikoli na příkazovém řádku.
Další informace naleznete v následujících zdrojích:
- Referenční dokumentace příkazového řádku nástroje MSBuild
- Profily publikování sady Visual Studio (.pubxml) pro nasazení aplikace ASP.NET Core
- dotnet msbuild
Stažení manifestu úloh
Při spuštění tohoto příkazu zahájí asynchronní stahování reklamních manifestů pro úlohy. Pokud stahování po dokončení tohoto příkazu stále běží, stahování se zastaví. Další informace naleznete v tématu Reklamní manifesty.
Argumenty
PROJECT|SOLUTION
Projekt nebo řešení k publikování.
PROJECT
je cesta a název souboru projektu jazyka C#, F# nebo jazyka Visual Basic nebo cesty k adresáři, který obsahuje soubor projektu jazyka C#, F# nebo Visual Basic. Pokud adresář není zadaný, nastaví se jako výchozí aktuální adresář.SOLUTION
je cesta a název souboru řešení (přípona .sln ) nebo cesta k adresáři, který obsahuje soubor řešení. Pokud adresář není zadaný, nastaví se jako výchozí aktuální adresář.
Možnosti
-a|--arch <ARCHITECTURE>
Určuje cílovou architekturu. Toto je zkratka pro nastavení identifikátoru runtime (RID), kde se zadaná hodnota zkombinuje s výchozím identifikátorem RID. Například na
win-x64
počítači se zadáním--arch x86
identifikátoru RID nastaví nawin-x86
. Pokud použijete tuto možnost, tuto možnost nepoužívejte-r|--runtime
. K dispozici od verze .NET 6 Preview 7.
--artifacts-path <ARTIFACTS_DIR>
Všechny výstupní soubory sestavení ze spuštěného příkazu budou v podsložkách pod zadanou cestou oddělenou projektem. Další informace naleznete v tématu Rozložení výstupu artefaktů. K dispozici od sady .NET 8 SDK.
-c|--configuration <CONFIGURATION>
Definuje konfiguraci sestavení. Pokud vyvíjíte pomocí sady .NET 8 SDK nebo novější verze, použije příkaz
Release
ve výchozím nastavení konfiguraci pro projekty, jejichž TargetFramework je nastavená nanet8.0
nebo novější verzi. Výchozí konfigurace sestavení jeDebug
pro starší verze sady SDK a pro starší cílové architektury. Výchozí nastavení projektu můžete přepsat nebo můžete použít tuto možnost. Další informace najdete v tématu dotnet publish používá konfiguraci vydané verze a sada dotnet pack používá konfiguraci vydané verze.
--disable-build-servers
Vynutí příkaz ignorovat všechny trvalé buildové servery. Tato možnost poskytuje konzistentní způsob, jak zakázat veškeré použití ukládání sestavení do mezipaměti, což vynutí sestavení úplně od začátku. Sestavení, které nespoléhá na mezipaměti, je užitečné, když jsou mezipaměti z nějakého důvodu poškozené nebo nesprávné. K dispozici od sady .NET 7 SDK.
-f|--framework <FRAMEWORK>
Publikuje aplikaci pro zadanou cílovou architekturu. V souboru projektu je nutné zadat cílovou architekturu.
--force
Vynutí vyřešení všech závislostí, i když bylo poslední obnovení úspěšné. Určení tohoto příznaku je stejné jako odstranění souboru project.assets.json .
-?|-h|--help
Vytiskne popis použití příkazu.
--interactive
Umožňuje příkazu zastavit a čekat na uživatelský vstup nebo akci. Například k dokončení ověřování. K dispozici od sady .NET Core 3.0 SDK.
--manifest <PATH_TO_MANIFEST_FILE>
Určuje jeden nebo několik cílových manifestů , které se mají použít k oříznutí sady balíčků publikovaných v aplikaci. Soubor manifestu je součástí výstupu
dotnet store
příkazu. Pokud chcete zadat více manifestů, přidejte--manifest
pro každý manifest možnost.--no-build
Nevytvoře projekt před publikováním. Příznak také implicitně nastaví
--no-restore
.--no-dependencies
Ignoruje odkazy projektu na projekt a obnoví pouze kořenový projekt.
--nologo
Nezobrazuje úvodní banner ani zprávu o autorských právech.
--no-restore
Při spuštění příkazu nespustí implicitní obnovení.
-o|--output <OUTPUT_DIRECTORY>
Určuje cestu pro výstupní adresář.
Pokud není zadaný, výchozí hodnota je [project_file_folder]/bin/[configuration]/[framework]/publish/ pro spustitelný soubor závislý na rozhraní a binární soubory pro různé platformy. Výchozí hodnota je [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ pro samostatný spustitelný soubor.
Pokud je výstupní složka ve složce projektu ve webovém projektu, následné
dotnet publish
příkazy vedou k vnořeným výstupním složkám. Pokud je například složka projektu myproject a výstupní složka publikování je myproject/publish a spustítedotnet publish
dvakrát, druhé spuštění vloží soubory obsahu, jako je .config a .json soubory do projektu/publikování/publikování. Chcete-li se vyhnout vnoření složek publikování, zadejte složku publikování, která není přímo ve složce projektu, nebo vylučte složku publikování z projektu. Pokud chcete vyloučit složku publish s názvem publishoutput, přidejte doPropertyGroup
elementu v souboru .csproj následující prvek:<DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
Sada .NET 7.0.200 SDK a novější
Pokud při spuštění tohoto příkazu v řešení zadáte
--output
možnost, rozhraní příkazového řádku vygeneruje upozornění (chyba ve verzi 7.0.200) kvůli nejasné sémantice výstupní cesty. Možnost--output
je zakázána, protože všechny výstupy všech sestavených projektů by se zkopírovaly do zadaného adresáře, který není kompatibilní s více cílenými projekty a projekty, které mají různé verze přímých a tranzitivních závislostí. Další informace najdete v tématu Možnost na úrovni--output
řešení již neplatí pro příkazy související s sestavením..NET Core 3.x SDK a novější
Pokud při publikování projektu zadáte relativní cestu, je vygenerovaný výstupní adresář relativní vzhledem k aktuálnímu pracovnímu adresáři, nikoli k umístění souboru projektu.
Pokud při publikování řešení zadáte relativní cestu, veškerý výstup pro všechny projekty přejde do zadané složky vzhledem k aktuálnímu pracovnímu adresáři. Pokud chcete výstup publikování provést, přejděte do samostatných složek pro každý projekt, místo možnosti zadejte relativní cestu pomocí vlastnosti
--output
msbuildPublishDir
. Napříkladdotnet publish -p:PublishDir=.\publish
odešle výstup publikování pro každý projekt dopublish
složky ve složce, která obsahuje soubor projektu..NET Core 2.x SDK
Pokud při publikování projektu zadáte relativní cestu, je vygenerovaný výstupní adresář relativní k umístění souboru projektu, nikoli k aktuálnímu pracovnímu adresáři.
Pokud při publikování řešení zadáte relativní cestu, výstup každého projektu přejde do samostatné složky vzhledem k umístění souboru projektu. Pokud při publikování řešení zadáte absolutní cestu, veškerý výstup publikování pro všechny projekty přejde do zadané složky.
--os <OS>
Určuje cílový operační systém (OS). Toto je zkratka pro nastavení identifikátoru runtime (RID), kde se zadaná hodnota zkombinuje s výchozím identifikátorem RID. Například na
win-x64
počítači se zadáním--os linux
identifikátoru RID nastaví nalinux-x64
. Pokud použijete tuto možnost, tuto možnost nepoužívejte-r|--runtime
. K dispozici od .NET 6.
--sc|--self-contained [true|false]
Publikuje modul runtime .NET s vaší aplikací, aby se modul runtime nemusel instalovat na cílový počítač. Výchozí hodnota je
true
, pokud je zadán identifikátor modulu runtime a projekt je spustitelný projekt (ne projekt knihovny). Další informace najdete v tématu Publikování a publikování aplikací .NET pomocí rozhraní příkazového řádku .NET.Pokud se tato možnost používá bez zadání
true
nebofalse
, výchozí hodnota jetrue
. V takovém případě nezadávejte argument řešení nebo projektu hned za--self-contained
, protožetrue
nebofalse
se očekává v dané pozici.--no-self-contained
Ekvivalent k
--self-contained false
.--source <SOURCE>
Identifikátor URI zdroje balíčku NuGet, který se má použít během operace obnovení.
-r|--runtime <RUNTIME_IDENTIFIER>
Publikuje aplikaci pro daný modul runtime. Seznam identifikátorů runtime (RID) najdete v katalogu RID. Další informace najdete v tématu Publikování a publikování aplikací .NET pomocí rozhraní příkazového řádku .NET. Pokud použijete tuto možnost, použijte
--self-contained
nebo--no-self-contained
také.
--tl:[auto|on|off]
Určuje, jestli se má protokolovací nástroj terminálu použít pro výstup sestavení. Výchozí hodnota je
auto
, která nejprve ověří prostředí před povolením protokolování terminálu. Prostředí ověřuje, že terminál dokáže používat moderní výstupní funkce a nepoužívá přesměrovaný standardní výstup, než povolí nový protokolovací modul.on
přeskočí kontrolu prostředí a povolí protokolování terminálu.off
přeskočí kontrolu prostředí a použije výchozí protokolovací nástroj konzoly.Protokolovací nástroj terminálu ukazuje fázi obnovení následovanou fází sestavení. Během každé fáze se aktuálně stavební projekty zobrazují v dolní části terminálu. Každý projekt, který vytváří výstupy cíle NÁSTROJE MSBuild, který se právě sestavuje, i dobu strávenou na daném cíli. Další informace o sestavení najdete v těchto informacích. Po dokončení sestavení projektu se zapíše jeden oddíl "sestavení dokončeno", který zachycuje:
- Název sestaveného projektu.
- Cílová architektura (pokud je cílená na více cílů).
- Stav tohoto sestavení.
- Primární výstup tohoto sestavení (který je hypertextový odkaz).
- Všechna diagnostika vygenerovaná pro tento projekt.
Tato možnost je dostupná od verze .NET 8.
--use-current-runtime, --ucr [true|false]
RuntimeIdentifier
Nastaví na platformu přenosnouRuntimeIdentifier
na základě počítače. K tomu dochází implicitně s vlastnostmi, které vyžadujíRuntimeIdentifier
, napříkladSelfContained
,PublishAot
,PublishSelfContained
,PublishSingleFile
aPublishReadyToRun
. Pokud je vlastnost nastavena na false, implicitní rozlišení již nebude k dispozici.
-v|--verbosity <LEVEL>
Nastaví úroveň podrobností příkazu. Povolené hodnoty jsou
q[uiet]
, ,n[ormal]
m[inimal]
,d[etailed]
adiag[nostic]
. Výchozí hodnota jeminimal
. Další informace najdete na webu LoggerVerbosity.
--version-suffix <VERSION_SUFFIX>
Definuje příponu verze, která nahradí hvězdičku (
*
) v poli verze souboru projektu.
Příklady
Vytvoření binárního souboru závislého na rozhraní pro různé platformy pro projekt v aktuálním adresáři:
dotnet publish
Počínaje sadou .NET Core 3.0 SDK tento příklad také vytvoří spustitelný soubor závislý na rozhraní pro aktuální platformu.
Vytvořte samostatný spustitelný soubor pro projekt v aktuálním adresáři pro konkrétní modul runtime:
dotnet publish --runtime osx-x64
Identifikátor RID musí být v souboru projektu.
Vytvořte spustitelný soubor závislý na rozhraní pro projekt v aktuálním adresáři pro konkrétní platformu:
dotnet publish --runtime osx-x64 --self-contained false
Identifikátor RID musí být v souboru projektu. Tento příklad platí pro sadu .NET Core 3.0 SDK a novější verze.
Publikujte projekt v aktuálním adresáři pro konkrétní modul runtime a cílovou architekturu:
dotnet publish --framework net8.0 --runtime osx-x64
Publikujte zadaný soubor projektu:
dotnet publish ~/projects/app1/app1.csproj
Publikujte aktuální aplikaci, ale neobnovujte odkazy projektu na projekt (P2P), pouze kořenový projekt během operace obnovení:
dotnet publish --no-dependencies
Viz také
- Přehled publikování aplikací .NET
- Publikování aplikací .NET pomocí .NET CLI
- Cílové architektury
- Katalog identifikátorů modulu runtime (RID)
- Kontejnerizace aplikace .NET s publikováním dotnet
- Práce s notarizací catalina pro macOS
- Adresářová struktura publikované aplikace
- Referenční dokumentace příkazového řádku nástroje MSBuild
- Profily publikování sady Visual Studio (.pubxml) pro nasazení aplikace ASP.NET Core
- dotnet msbuild
- Oříznout samostatná nasazení