Sdílet prostřednictvím


Publikování aplikací .NET pomocí .NET CLI

Tento článek ukazuje, jak publikovat aplikaci .NET z příkazového řádku. .NET poskytuje tři způsoby publikování aplikací. Nasazení závislé na rozhraní vytvoří multiplatformní .dll soubor, který používá místně nainstalovaný modul runtime .NET. Spustitelný soubor závislý na frameworku vytvoří platformově specifický spustitelný soubor, který využívá místně nainstalovaný .NET runtime. Samostatný spustitelný soubor vytvoří spustitelný soubor specifický pro platformu a obsahuje místní kopii modulu runtime .NET.

Přehled těchto režimů publikování najdete v tématu Nasazení aplikace .NET.

Hledáte rychlou nápovědu k používání rozhraní příkazového řádku? Následující tabulka uvádí několik příkladů, jak publikovat aplikaci. Cílovou architekturu můžete zadat pomocí parametru -f <TFM> nebo úpravou souboru projektu. Další informace naleznete v tématu Základy publikování.

Režim publikování Příkaz
Nasazení závislé na rozhraní dotnet publish -c Release -p:UseAppHost=false
Spustitelný soubor závislý na frameworku dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
Samostatné nasazení dotnet publish -c Release -r <RID> --self-contained true

Poznámka:

  • Parametr -c Release není povinný. Poskytuje se jako připomenutí k publikování buildu vydané verze vaší aplikace.
  • V .NET SDK 3.1 nebo vyšším je výchozím režimem publikování při spuštění základního dotnet publish příkazu spustitelný soubor závislý na frameworku.

Základy publikování

Nastavení <TargetFramework> souboru projektu určuje výchozí cílovou architekturu při publikování aplikace. Cílový rámec můžete změnit na libovolný platný moniker cílového rámce (TFM). Pokud například váš projekt používá <TargetFramework>net9.0</TargetFramework>, vytvoří se binární soubor, který cílí na .NET 9. TFM zadaný v tomto nastavení je výchozím cílem používaným příkazem dotnet publish.

Pokud chcete cílit na více než jednu architekturu, můžete nastavit <TargetFrameworks> nastavení na více hodnot TFM oddělených středníkem. Při sestavování aplikace se vytvoří sestavení pro každou cílovou architekturu. Při publikování aplikace ale musíte zadat cílovou architekturu pomocí dotnet publish -f <TFM> příkazu.

Výchozí režim BUILD-CONFIGURATION je Release, není-li změněn pomocí parametru -c.

Výchozí výstupní adresář dotnet publish příkazu je ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Například dotnet publish -c Release -f net9.0 publikuje do ./bin/Release/net9.0/publish/. Můžete se ale přihlásit ke zjednodušené výstupní cestě a struktuře složek pro všechny výstupy sestavení. Další informace najdete v tématu Rozložení výstupu Artefakty.

Nativní závislosti

Pokud má vaše aplikace nativní závislosti, nemusí běžet v jiném operačním systému. Pokud vaše aplikace například používá nativní rozhraní API pro Windows, nespustí se v macOS nebo Linuxu. Pro každou platformu byste museli zadat kód specifický pro platformu a zkompilovat spustitelný soubor.

Zvažte také, jestli knihovna, na kterou jste odkazovali, má nativní závislost, nemusí vaše aplikace běžet na každé platformě. Je však možné, že balíček NuGet, na který odkazujete, obsahoval verze specifické pro platformu pro zpracování požadovaných nativních závislostí za vás.

Při distribuci aplikace s nativními závislostmi možná budete muset pomocí dotnet publish -r <RID> přepínače určit cílovou platformu, pro kterou chcete publikovat. Seznam identifikátorů modulu runtime naleznete v katalogu identifikátorů modulu runtime (RID).

Další informace o binárních souborech specifických pro platformu jsou uvedeny v sekcích Spustitelný soubor závislý na rámci a Náklad samostatného nasazení.

Ukázková aplikace

K prozkoumání příkazů publikování můžete použít následující aplikaci. Aplikace se vytvoří spuštěním následujících příkazů v terminálu:

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

Soubor Program.cs nebo Program.vb soubor vygenerovaný šablonou konzoly je potřeba změnit na následující:

using System;

namespace apptest1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
        }
    }
}
Module Program
    Sub Main(args As String())
        Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
    End Sub
End Module

Při spuštění aplikace (dotnet run) se zobrazí následující výstup:

  _   _      _ _         __        __         _     _ _
 | | | | ___| | | ___    \ \      / /__  _ __| | __| | |
 | |_| |/ _ \ | |/ _ \    \ \ /\ / / _ \| '__| |/ _` | |
 |  _  |  __/ | | (_) |    \ V  V / (_) | |  | | (_| |_|
 |_| |_|\___|_|_|\___( )    \_/\_/ \___/|_|  |_|\__,_(_)
                     |/

Nasazení závislé na rozhraní

Když publikujete aplikaci jako FDD, ve složce <PROJECT-NAME>.dll se vytvoří soubor ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Aplikaci spustíte tak, že přejdete do výstupní složky a použijete příkaz dotnet <PROJECT-NAME>.dll .

Vaše aplikace je nakonfigurovaná tak, aby cílila na konkrétní verzi .NET. Požadovaný runtime .NET musí být na každém počítači, na kterém běží vaše aplikace. Aby například vaše aplikace cílená na .NET 9 fungovala správně, každý počítač, na kterém vaše aplikace běží, musí mít nainstalovaný modul runtime .NET 9. Jak je uvedeno v části Základy publikování , můžete upravit soubor projektu a změnit výchozí cílovou architekturu nebo cílit na více než jednu architekturu.

Při publikování FDD se vytvoří aplikace, která se automaticky aktualizuje na nejnovější dostupnou opravu zabezpečení .NET na systému, kde aplikace běží. Další informace o vazbě verzí v době kompilace naleznete v tématu Výběr verze .NET verze, která se má použít.

Režim publikování Příkaz
Nasazení závislé na rozhraní dotnet publish -c Release -p:UseAppHost=false

Spustitelný soubor závislý na frameworku

Výchozím režimem pro základní příkaz dotnet publish je spustitelný soubor závislý na rozhraní (FDE). Nemusíte zadávat žádné další parametry, pokud chcete cílit na aktuální operační systém.

V tomto režimu se vytvoří spustitelný hostitel specifický pro platformu pro hostování vaší multiplatformní aplikace. Tento režim je podobný FDD, protože FDD vyžaduje hostitele ve formě dotnet příkazu. Název spustitelného souboru hostitele se liší podle platformy a má podobný název jako <PROJECT-FILE>.exe. Tento spustitelný soubor můžete spustit přímo místo volání dotnet <PROJECT-FILE>.dll, což je stále přijatelný způsob, jak aplikaci spustit.

Vaše aplikace je nakonfigurovaná tak, aby cílila na konkrétní verzi .NET. Požadovaný runtime .NET musí být na každém počítači, na kterém běží vaše aplikace. Aby například vaše aplikace cílená na .NET 9 fungovala správně, každý počítač, na kterém vaše aplikace běží, musí mít nainstalovaný modul runtime .NET 9. Jak je uvedeno v části Základy publikování , můžete upravit soubor projektu a změnit výchozí cílovou architekturu nebo cílit na více než jednu architekturu.

Publikování FDE vytvoří aplikaci, která se automaticky přepojí na nejnovější opravu zabezpečení .NET dostupnou v systému, na kterém je aplikace spuštěná. Další informace o vazbě verzí v době kompilace naleznete v tématu Výběr verze .NET verze, která se má použít.

Režim publikování Příkaz
Spustitelný soubor závislý na frameworku dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release

Při každém použití -r přepínače se cesta výstupní složky změní na: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/

Pokud používáte ukázkovou aplikaci, spusťte dotnet publish -f net9.0 -r win-x64 --self-contained false. Tento příkaz vytvoří následující spustitelný soubor: ./bin/Debug/net9.0/win-x64/publish/apptest1.exe

Poznámka:

Celkovou velikost nasazení můžete zmenšit povolením invariantního režimu globalizace. Tento režim je užitečný pro aplikace, které nejsou globálně orientované a které mohou používat konvence formátování, konvence psaní velkých a malých písmen, porovnávání řetězců a seřazení invariantní jazykové verze. Další informace o invariantní režimu globalizace a jejím povolení naleznete v tématu Invariantní režim globalizace .NET.

Konfigurace chování vyhledávání při instalaci .NET

V .NET 9 a novějších verzích můžete nakonfigurovat vyhledávací cesty instalace .NET publikovaného spustitelného souboru pomocí vlastností AppHostDotNetSearch a AppHostRelativeDotNet.

AppHostDotNetSearch umožňuje zadat jedno nebo více umístění, kde spustitelný soubor vyhledá instalaci .NET:

AppHostRelativeDotNet určuje cestu vzhledem ke spustitelnému souboru, která bude prohledána, pokud AppHostDotNetSearch obsahuje AppRelative.

Další informace naleznete v tématu AppHostDotNetSearch, AppHostRelativeDotNet a možnostech umístění instalace v aplikaci apphost.

Samostatné nasazení

Při publikování samostatného nasazení (SCD) .NET SDK vytvoří spustitelný soubor specifický pro platformu. Publikování SCD zahrnuje všechny požadované soubory .NET ke spuštění aplikace, ale nezahrnuje nativní závislosti .NET (například pro .NET 8 v Linuxu). Tyto závislosti musí být přítomné v systému před spuštěním aplikace.

Publikování SCD vytvoří aplikaci, která se neaktualizuje na nejnovější dostupnou .NET opravu zabezpečení. Další informace o vazbě verzí v době kompilace naleznete v tématu Výběr verze .NET verze, která se má použít.

K publikování SCD musíte použít následující přepínače s příkazem dotnet publish:

  • -r <RID>

    Tento přepínač používá identifikátor (RID) k určení cílové platformy. Seznam identifikátorů modulu runtime naleznete v katalogu identifikátorů modulu runtime (RID).

  • --self-contained true

    Tento přepínač říká sadě .NET SDK, aby vytvořil spustitelný soubor jako SCD.

Režim publikování Příkaz
Samostatné nasazení dotnet publish -c Release -r <RID> --self-contained true

Návod

  • V .NET 6 a novějších verzích můžete snížit celkovou velikost kompatibilních samostatných aplikací publikováním se zkrácením. To umožňuje odstranění částí architektury a odkazovaných sestavení, které se nenacházejí na žádné kódové cestě ani nejsou potenciálně odkazovány v reflexi za běhu. Podívejte se na nekompatibility oříznutí a zjistěte, zda je oříznutí vhodné pro vaši aplikaci.
  • Celkovou velikost nasazení můžete zmenšit povolením invariantního režimu globalizace. Tento režim je užitečný pro aplikace, které nejsou globálně orientované a které mohou používat konvence formátování, konvence psaní velkých a malých písmen, porovnávání řetězců a seřazení invariantní jazykové verze. Další informace o invariantní režimu globalizace a jejím povolení najdete v tématu Invariantní režim globalizace .NET Core.

Viz také