dotnet publish
Tento článek se vztahuje na: ✔️ .NET Core 3.1 SDK a novější verze
Jméno
dotnet publish
– Publikuje aplikaci a její závislosti do složky pro nasazení do hostitelského systému.
Přehled
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 dll rozšíření.
- 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 příkazu dotnet publish
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) pro 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ět dotnet 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 možnost --no-restore
.
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 v 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 dokumentaci dotnet restore
.
MSBuild
Příkaz dotnet publish
volá nástroj MSBuild, který vyvolá cíl Publish
. Pokud je vlastnost IsPublishable
nastavená na false
pro konkrétní projekt, nelze Publish
cíl vyvolat a příkaz dotnet publish
spustí implicitní dotnet restore v projektu.
Všechny parametry předané dotnet publish
se předají msBuildu. Parametry -c
a -o
se mapuje na vlastnosti Configuration
nástroje MSBuild a PublishDir
.
Příkaz dotnet publish
přijímá možnosti nástroje MSBuild, například -p
pro nastavení vlastností a -l
pro 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 také nastavit odkazem na soubor .pubxml. Například:
dotnet publish -p:PublishProfile=FolderProfile
Předchozí příklad používá soubor FolderProfile.pubxml, který je nalezen ve složce <project_folder>/Properties/PublishProfile s. Pokud při nastavování vlastnosti PublishProfile
zadáte cestu a příponu souboru, budou ignorovány. MsBuild ve výchozím nastavení hledá ve složce Properties/PublishProfile s a předpokládá pubxml příponu souboru. Chcete-li zadat cestu a název souboru včetně přípony, nastavte vlastnost PublishProfileFullPath
místo vlastnosti PublishProfile
.
V souboru .pubxml:
-
PublishUrl
používá Visual Studio k označení cíle publikování. -
PublishDir
používá rozhraní příkazového řádku 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. Pokud se problém s GitHubem 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 dotnet/sdk#29817 plány přidání podpory 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é mají vliv na sestavení:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
Vlastnosti nástroje MSBuild
Následující vlastnosti nástroje MSBuild mění výstup dotnet publish
.
PublishReadyToRun
Kompiluje sestavení aplikace jako formát ReadyToRun (R2R). R2R je forma předběžné kompilace (AOT). Další informace naleznete 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 místo příkazového řádku zadat
PublishReadyToRun
v profilu publikování.PublishSingleFile
Zabalí aplikaci do spustitelného souboru specifického pro platformu. Další informace o publikování s jedním souborem naleznete v návrhový dokument s jedním souborem bundler.
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 Střih 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 najdete v následujících zdrojích informací:
- referenční 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ář.
Volby
-a|--arch <ARCHITECTURE>
Určuje cílovou architekturu. Toto je zkratka pro nastavení identifikátoru Runtime Identifier (RID), kde se zadaná hodnota zkombinuje s výchozím identifikátorem RID. Například na
win-x64
počítači určuje,--arch x86
nastaví identifikátor RID nawin-x86
. Pokud použijete tuto možnost, nepoužívejte možnost-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 ve výchozím nastavení konfiguraci
Release
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á konfigurace vydané verze a 'dotnet pack' používá release configuration.
--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ů, použít k oříznutí sady balíčků publikovaných v aplikaci. Soubor manifestu je součástí výstupu příkazu
dotnet store
. Pokud chcete zadat více manifestů, přidejte pro každý manifest možnost--manifest
.--no-build
Nevytvoře projekt před publikováním. Také implicitně nastaví příznak
--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ý, ve výchozím nastavení se [project_file_folder]/bin/[konfigurace]/[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/[konfigurace]/[framework]/[runtime]/publish/ pro samostatný spustitelný soubor.
Pokud je výstupní složka ve webovém projektu ve složce 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 projektu a výstupní složka publikování je projekt/publikovánía spustítedotnet publish
dvakrát, druhé spuštění vloží soubory obsahu, jako jsou .config a .json soubory do myproject/publish. Pokud se chcete vyhnout vnoření složek publikování, zadejte složku publikování, která není přímo ve složce projektu, nebo vyloučíte složku publikování z projektu. Chcete-li vyloučit složku publish s názvem publishoutput, přidejte doPropertyGroup
elementu .csproj:<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 možnost
--output
, 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--output
na úrovni ř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
--output
zadejte relativní cestu pomocí vlastnosti msbuildPublishDir
. Napříkladdotnet publish -p:PublishDir=.\publish
odesílá výstup publikování pro každý projekt do složkypublish
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 Identifier (RID), kde se zadaná hodnota zkombinuje s výchozím identifikátorem RID. Například na
win-x64
počítači určuje,--os linux
nastaví identifikátor RID nalinux-x64
. Pokud použijete tuto možnost, nepoužívejte možnost-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í aplikací .NET 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í ani projektu hned za--self-contained
, protožetrue
nebofalse
se v dané pozici očekává.--no-self-contained
Ekvivalent
--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 vkatalogu identifikátorů RID
. Další informace najdete v tématu publikování aplikací .NET a Publikování aplikací .NET pomocí rozhraní příkazového řádku .NET. Pokud použijete tuto možnost, použijte také --self-contained
nebo--no-self-contained
.
--tl:[auto|on|off]
Určuje, jestli se má pro výstup sestavení použít
protokolovací nástroj terminálu. 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]
Nastaví
RuntimeIdentifier
na přenosnýRuntimeIdentifier
platformy 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]
,m[inimal]
,n[ormal]
,d[etailed]
adiag[nostic]
. Výchozí hodnota jeminimal
. Další informace najdete v tématu LoggerVerbosity.
--version-suffix <VERSION_SUFFIX>
Definuje příponu verze, která nahradí hvězdičku (
*
) v poli verze souboru projektu.
Příklady
Vytvořte binární pro pro projekt v aktuálním adresáři závislý na
architektury: 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í rozhraní příkazového řádku .NET
- cílové architektury
- katalogu identifikátorů modulu runtime
(RID) - kontejnerizace aplikace .NET s publikováním dotnet
Práce s notářské macOS Catalina- adresářová struktura publikované aplikace
- referenční 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í