Sdílet prostřednictvím


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 publisha 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í:

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 na win-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á na net8.0 nebo novější verzi. Výchozí konfigurace sestavení je Debug 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íte dotnet 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 do PropertyGroup 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 msbuild PublishDir. Například dotnet publish -p:PublishDir=.\publish odesílá výstup publikování pro každý projekt do složky publish 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 na linux-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 nebo false, výchozí hodnota je true. V takovém případě nezadávejte argument řešení ani projektu hned za --self-contained, protože true nebo false 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říklad SelfContained, PublishAot, PublishSelfContained, PublishSingleFilea PublishReadyToRun. 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]a diag[nostic]. Výchozí hodnota je minimal. 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é