Udostępnij za pośrednictwem


Publikowanie aplikacji platformy .NET za pomocą interfejsu wiersza polecenia platformy .NET

W tym artykule pokazano, jak opublikować aplikację platformy .NET z poziomu wiersza polecenia. Platforma .NET udostępnia trzy sposoby publikowania aplikacji. Wdrożenie zależne od platformy tworzy międzyplatformowy plik .dll, który używa lokalnie zainstalowanego środowiska uruchomieniowego platformy .NET. Plik wykonywalny zależny od platformy tworzy plik wykonywalny specyficzny dla platformy, który używa lokalnie zainstalowanego środowiska uruchomieniowego platformy .NET. Samodzielny plik wykonywalny tworzy plik wykonywalny specyficzny dla platformy i zawiera lokalną kopię środowiska uruchomieniowego platformy .NET.

Aby zapoznać się z omówieniem tych trybów publikowania, zobacz Wdrażanie aplikacji platformy .NET.

Szukasz krótkiej pomocy dotyczącej korzystania z interfejsu wiersza polecenia? W poniższej tabeli przedstawiono kilka przykładów publikowania aplikacji. Możesz określić strukturę docelową za pomocą parametru -f <TFM> lub edytując plik projektu. Aby uzyskać więcej informacji, zobacz Podstawy publikowania.

Tryb publikowania Polecenie
Wdrożenie zależne od struktury dotnet publish -c Release -p:UseAppHost=false
Plik wykonywalny zależny od struktury dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
Wdrożenie samodzielne dotnet publish -c Release -r <RID> --self-contained true

Uwaga

  • Parametr -c Release nie jest wymagany. To jest przypomnienie o opublikowaniu kompilacji Release aplikacji.
  • W zestawie .NET SDK 3.1 lub nowszym plik wykonywalny zależny od platformy jest domyślnym trybem publikowania podczas uruchamiania podstawowego dotnet publish polecenia.

Podstawy publikowania

Ustawienie <TargetFramework> pliku projektu określa domyślną strukturę docelową podczas publikowania aplikacji. Możesz zmienić docelowy framework na dowolny prawidłowy Target Framework Moniker (TFM). Jeśli na przykład projekt używa <TargetFramework>net9.0</TargetFramework>pliku binarnego przeznaczonego dla platformy .NET 9, zostanie utworzony. Program TFM określony w tym ustawieniu jest domyślnym elementem docelowym używanym dotnet publish przez polecenie .

Jeśli chcesz kierować więcej niż jedną strukturę, możesz ustawić <TargetFrameworks> ustawienie na wiele wartości TFM rozdzielonych średnikami. Podczas kompilowanie aplikacji kompilacja jest generowany dla każdej platformy docelowej. Jednak podczas publikowania aplikacji należy określić platformę docelową za pomocą polecenia dotnet publish -f <TFM>.

Domyślny tryb BUILD-CONFIGURATION jest Release, chyba że zmieni się go za pomocą parametru -c.

Domyślny katalog wyjściowy polecenia dotnet publish to ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Na przykład dotnet publish -c Release -f net9.0 publikuje w pliku ./bin/Release/net9.0/publish/. Można jednak wyrazić zgodę na uproszczoną strukturę ścieżki wyjściowej i folderu dla wszystkich danych wyjściowych kompilacji. Aby uzyskać więcej informacji, zobacz Układ danych wyjściowych artefaktów.

Zależności natywne

Jeśli aplikacja ma natywne zależności, może nie działać w innym systemie operacyjnym. Jeśli na przykład aplikacja używa natywnego interfejsu API systemu Windows, nie będzie działać w systemie macOS lub Linux. Należy podać kod specyficzny dla platformy i skompilować plik wykonywalny dla każdej platformy.

Rozważ również, jeśli biblioteka, do której się odwołujesz, ma natywną zależność, aplikacja może nie działać na każdej platformie. Istnieje jednak możliwość, że odwołujący się pakiet NuGet zawiera wersje specyficzne dla platformy do obsługi wymaganych zależności natywnych.

Podczas dystrybucji aplikacji z natywnymi zależnościami może być konieczne użycie przełącznika dotnet publish -r <RID> w celu określenia platformy docelowej, dla której chcesz opublikować. Aby uzyskać listę identyfikatorów środowiska uruchomieniowego, zobacz wykaz identyfikatorów środowiska uruchomieniowego (RID).

Więcej informacji na temat plików binarnych specyficznych dla platformy znajduje się w sekcjach Plik wykonywalny zależny od platformy i Samodzielne wdrażanie .

Przykładowa aplikacja

Aby zapoznać się z poleceniami publikowania, możesz użyć następującej aplikacji. Aplikacja jest tworzona przez uruchomienie następujących poleceń w terminalu:

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

Plik Program.cs lub Program.vb wygenerowany przez szablon konsoli musi zostać zmieniony na następujące:

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

Po uruchomieniu aplikacji (dotnet run) zostaną wyświetlone następujące dane wyjściowe:

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

Wdrożenie zależne od struktury

Podczas publikowania aplikacji jako FDD plik <PROJECT-NAME>.dll zostaje utworzony w folderze ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Aby uruchomić aplikację, przejdź do folderu output i użyj dotnet <PROJECT-NAME>.dll polecenia .

Aplikacja jest skonfigurowana, aby celować w określoną wersję platformy .NET. Docelowe środowisko uruchomieniowe platformy .NET musi znajdować się na dowolnej maszynie, na której działa aplikacja. Jeśli na przykład aplikacja jest przeznaczona dla platformy .NET 9, na każdej maszynie uruchomionej w aplikacji musi być zainstalowane środowisko uruchomieniowe platformy .NET 9. Zgodnie z opisem w sekcji Podstawy publikowania, możesz edytować plik projektu, aby zmienić domyślną platformę docelową lub ustawić więcej niż jedną platformę docelową.

Publikowanie pliku FDD tworzy aplikację, która automatycznie aktualizuje się do najnowszej dostępnej w systemie poprawki zabezpieczeń platformy .NET, na którym jest uruchamiana. Aby uzyskać więcej informacji na temat powiązania wersji w czasie kompilacji, zobacz Wybieranie wersji platformy .NET do użycia.

Tryb publikowania Polecenie
Wdrożenie zależne od struktury dotnet publish -c Release -p:UseAppHost=false

Plik wykonywalny zależny od struktury

Plik wykonywalny zależny od platformy (FDE) jest trybem domyślnym dla podstawowego dotnet publish polecenia. Nie musisz określać żadnych innych parametrów, o ile chcesz kierować do bieżącego systemu operacyjnego.

W tym trybie jest tworzony host wykonywalny specyficzny dla platformy do hostowania aplikacji międzyplatformowej. Ten tryb jest podobny do FDD, gdyż FDD wymaga hosta w formie polecenia dotnet. Nazwa pliku wykonywalnego hosta różni się w zależności od platformy i nosi nazwę podobną do <PROJECT-FILE>.exe. Możesz uruchomić ten plik wykonywalny bezpośrednio zamiast wywoływać dotnet <PROJECT-FILE>.dll, co jest nadal akceptowalnym sposobem uruchamiania aplikacji.

Aplikacja jest skonfigurowana, aby celować w określoną wersję platformy .NET. Docelowe środowisko uruchomieniowe platformy .NET musi znajdować się na dowolnej maszynie, na której działa aplikacja. Jeśli na przykład aplikacja jest przeznaczona dla platformy .NET 9, na każdej maszynie uruchomionej w aplikacji musi być zainstalowane środowisko uruchomieniowe platformy .NET 9. Zgodnie z opisem w sekcji Podstawy publikowania, możesz edytować plik projektu, aby zmienić domyślną platformę docelową lub ustawić więcej niż jedną platformę docelową.

Opublikowanie FDE tworzy aplikację, która automatycznie przeskakuje do najnowszej aktualizacji zabezpieczeń platformy .NET dostępnej na systemie, na którym działa aplikacja. Aby uzyskać więcej informacji na temat powiązania wersji w czasie kompilacji, zobacz Wybieranie wersji platformy .NET do użycia.

Tryb publikowania Polecenie
Plik wykonywalny zależny od struktury dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release

Za każdym razem, gdy używasz przełącznika, ścieżka folderu wyjściowego -r zmienia się na: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/

Jeśli używasz przykładowej aplikacji, uruchom polecenie dotnet publish -f net9.0 -r win-x64 --self-contained false. To polecenie tworzy następujący plik wykonywalny: ./bin/Debug/net9.0/win-x64/publish/apptest1.exe

Uwaga

Całkowity rozmiar wdrożenia można zmniejszyć, włączając niezmienny tryb globalizacji. Ten tryb jest przydatny w przypadku aplikacji, które nie działają w sposób globalny i mogą korzystać z konwencji formatowania, konwencji wielkości liter oraz porównywania i sortowania ciągów niezmiennej kultury. Aby uzyskać więcej informacji na temat niezmiennego trybu globalizacji i sposobu jej włączania, zobacz Tryb niezmienny globalizacji platformy .NET.

Konfiguracja sposobu wyszukiwania instalacji .NET

W programie .NET 9 i nowszych wersjach można skonfigurować ścieżki wyszukiwania instalacji platformy .NET opublikowanego pliku wykonywalnego za pomocą właściwości AppHostDotNetSearch i AppHostRelativeDotNet .

AppHostDotNetSearch umożliwia określenie co najmniej jednej lokalizacji, w której plik wykonywalny będzie szukać instalacji platformy .NET:

  • AppLocal: folder pliku wykonywalnego aplikacji
  • AppRelative: ścieżka względem pliku wykonywalnego programu
  • EnvironmentVariables: wartość DOTNET_ROOT[_<arch>] zmiennych środowiskowych
  • Global: zarejestrowane i domyślne globalne lokalizacje instalacji

AppHostRelativeDotNet określa ścieżkę względną do pliku wykonywalnego, która będzie wyszukiwana, gdy AppHostDotNetSearch zawiera AppRelative.

Aby uzyskać więcej informacji, zobacz AppHostDotNetSearch, AppHostRelativeDotNet oraz opcje lokalizacji instalacji w apphost.

Kompleksowe wdrożenie

Kiedy publikujesz samodzielne wdrożenie (SCD), zestaw .NET SDK tworzy wykonywalny plik specyficzny dla platformy. Opublikowanie SCD obejmuje wszystkie wymagane pliki .NET do uruchomienia aplikacji, ale nie obejmuje natywnych zależności .NET (na przykład dla .NET 8 w systemie Linux). Te zależności muszą być obecne w systemie przed uruchomieniem aplikacji.

Publikowanie SCD tworzy aplikację, która nie jest aktualizowana do najnowszej dostępnej poprawki zabezpieczeń platformy .NET. Aby uzyskać więcej informacji na temat powiązania wersji w czasie kompilacji, zobacz Wybieranie wersji platformy .NET do użycia.

Aby opublikować protokół SCD, należy użyć następujących przełączników z poleceniem dotnet publish:

  • -r <RID>

    Ten przełącznik używa identyfikatora (RID) do określenia platformy docelowej. Aby uzyskać listę identyfikatorów środowiska uruchomieniowego, zobacz wykaz identyfikatorów środowiska uruchomieniowego (RID).

  • --self-contained true

    Ten przełącznik informuje pakiet .NET SDK o utworzeniu pliku wykonywalnego jako SCD.

Tryb publikowania Polecenie
Kompleksowe wdrożenie dotnet publish -c Release -r <RID> --self-contained true

Napiwek

  • W wersjach .NET 6 i nowszych można zmniejszyć całkowity rozmiar kompatybilnych aplikacji autonomicznych, publikując w wersji zredukowanej. Dzięki temu trymer może usuwać części struktury i przywoływalne zestawy, które nie znajdują się w żadnej ścieżce kodu lub potencjalnie odwoływalone w odbiciu środowiska uruchomieniowego. Zobacz niezgodności przycinania, aby określić, czy przycinanie ma sens dla Twojej aplikacji.
  • Całkowity rozmiar wdrożenia można zmniejszyć, włączając niezmienny tryb globalizacji. Ten tryb jest przydatny w przypadku aplikacji, które nie działają w sposób globalny i mogą korzystać z konwencji formatowania, konwencji wielkości liter oraz porównywania i sortowania ciągów niezmiennej kultury. Aby uzyskać więcej informacji na temat niezmiennego trybu globalizacji i sposobu jej włączania, zobacz Tryb niezmienny globalizacji platformy .NET Core.

Zobacz też