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>]
    [-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 testdotnet publisha 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:

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í na win-x86. Pokud použijete tuto možnost, tuto možnost nepoužívejte -r|--runtime . K dispozici od verze .NET 6 Preview 7.

  • -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á 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á 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íte dotnet 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 do PropertyGroup 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říklad dotnet publish -p:PublishDir=.\publish odešle výstup publikování pro každý projekt do publish 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í na linux-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 nebo false, výchozí hodnota je true. V takovém případě nezadávejte argument řešení nebo projektu hned za --self-contained, protože true nebo false 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řenosnou RuntimeIdentifier 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], , n[ormal]m[inimal], d[etailed]a diag[nostic]. Výchozí hodnota je minimal. 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é