Omówienie publikowania aplikacji .NET

Aplikacje, które tworzysz za pomocą .NET, można publikować w dwóch różnych trybach, a tryb ma wpływ na sposób, w jaki użytkownik uruchamia aplikację.

Opublikowanie aplikacji jako samodzielnej tworzy aplikację, która zawiera środowisko uruchomieniowe i biblioteki .NET oraz aplikację i jej zależności. Użytkownicy aplikacji mogą ją uruchomić na maszynie, na których nie zainstalowano środowiska uruchomieniowego .NET.

Opublikowanie aplikacji jako zależnej od struktury powoduje, że aplikacja zawiera tylko samą aplikację i jej zależności. Użytkownicy aplikacji muszą oddzielnie zainstalować środowisko uruchomieniowe .NET.

Oba tryby publikowania domyślnie dają plik wykonywalny specyficzny dla platformy. Aplikacje zależne od platformy można tworzyć bez pliku wykonywalnego, a aplikacje te są aplikacjami dla wielu platform.

Podczas produkcji pliku wykonywalnego można określić platformę docelową za pomocą identyfikatora środowiska uruchomieniowego (RID). Aby uzyskać więcej informacji na temat identyfikatorów RID, zobacz Katalog identyfikatorów RID .NET.

W poniższej tabeli przedstawiono polecenia używane do publikowania aplikacji jako zależnej od struktury lub samodzielnej wersji zestawu SDK:

Typ Zestaw SDK 2.1 Zestaw SDK 3.1 Zestaw SDK 5.0 Zestaw SDK 6.0 Polecenie
plik wykonywalny zależny od platformy dla bieżącej platformy. ✔️ ✔️ ✔️ dotnet publish
plik wykonywalny zależny od platformy dla określonej platformy. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
dane binarne międzyplatformowe zależne od platformy. ✔️ ✔️ ✔️ ✔️ dotnet publish
samodzielny plik wykonywalny. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Aby uzyskać więcej informacji, zobacz .NET dotnet publish polecenia.

Tworzenie pliku wykonywalnego

Pliki wykonywalne nie są międzyplatformowe. Są one specyficzne dla systemu operacyjnego i architektury procesora CPU. Podczas publikowania aplikacji i tworzenia pliku wykonywalnego można opublikować aplikację jako samodzielną lub zależną od struktury. Publikowanie aplikacji jako samodzielnej obejmuje środowisko uruchomieniowe .NET wraz z aplikacją, a użytkownicy aplikacji nie muszą martwić się o zainstalowanie środowiska .NET przed uruchomieniem aplikacji. Aplikacje opublikowane jako zależne od struktury nie zawierają środowiska uruchomieniowego i bibliotek .NET; uwzględniane są tylko zależności aplikacji i innych firm.

Następujące polecenia dają plik wykonywalny:

Typ Zestaw SDK 2.1 Zestaw SDK 3.1 Zestaw SDK 5.0 Zestaw SDK 6.0 Polecenie
plik wykonywalny zależny od platformy dla bieżącej platformy. ✔️ ✔️ ✔️ dotnet publish
plik wykonywalny zależny od platformy dla określonej platformy. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
samodzielny plik wykonywalny. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Tworzenie pliku binarnego międzyplatformowego

Pliki binarne międzyplatformowe są tworzone podczas publikowania aplikacji jako zależnej od struktury w postacipliku dll . Nazwa pliku dll pochodzi od projektu. Jeśli na przykład masz aplikację o nazwie word_reader, zostanie utworzony word_reader.dll o nazwie . Aplikacje opublikowane w ten sposób są uruchamiane za pomocą dotnet <filename.dll> polecenia i mogą być uruchamiane na dowolnej platformie.

Pliki binarne międzyplatformowe można uruchamiać w dowolnym systemie operacyjnym, o ile docelowe środowisko uruchomieniowe platformy .NET jest już zainstalowane. Jeśli docelowe środowisko uruchomieniowe .NET nie jest zainstalowane, aplikacja może działać przy użyciu nowszego środowiska uruchomieniowego, jeśli aplikacja jest skonfigurowana do przekazywania do przodu. Aby uzyskać więcej informacji, zobacz Temat roll forward aplikacji zależnych od struktury.

Następujące polecenie tworzy plik binarny międzyplatformowy:

Typ Zestaw SDK 2.1 Zestaw SDK 3.x Zestaw SDK 5.0 Zestaw SDK 6.0 Polecenie
dane binarne międzyplatformowe zależne od platformy. ✔️ ✔️ ✔️ ✔️ dotnet publish

Publikowanie zależne od struktury

Aplikacje opublikowane jako zależne od struktury są międzyplatformowe i nie zawierają środowiska uruchomieniowego platformy .NET. Użytkownik aplikacji musi zainstalować środowisko uruchomieniowe .NET.

Opublikowanie aplikacji jako zależnej od struktury powoduje uzyskanie pliku binarnego dla platformy jako pliku dll oraz pliku wykonywalnego specyficznego dla platformy, który jest przeznaczony dla bieżącej platformy. Biblioteka dll jest międzyplatformowa, a plik wykonywalny nie. Jeśli na przykład opublikujesz aplikację o nazwie word_reader docelową Windows, zostanie utworzonyword_reader.exewykonywalny wraz z word_reader.dll. W przypadku określania wartości docelowej dla systemu Linux lub macOS tworzony word_reader wykonywalny wraz z word_reader.dll. Aby uzyskać więcej informacji na temat identyfikatorów RID, zobacz Katalog identyfikatorów RID .NET.

Ważne

Zestaw .NET SDK 2.1 nie umożliwia tworzenia plików wykonywalnych specyficznych dla platformy podczas publikowania zależnych od struktury aplikacji.

Plik binarny aplikacji dla wielu platform można dotnet <filename.dll> uruchomić za pomocą polecenia i można go uruchomić na dowolnej platformie. Jeśli aplikacja używa pakietu NuGet który zawiera implementacje specyficzne dla platformy, zależności wszystkich platform są kopiowane do folderu publish wraz z aplikacją.

Plik wykonywalny dla określonej platformy można utworzyć, przekazując parametry -r <RID> --self-contained false do dotnet publish polecenia . W przypadku -r pominięcia parametru dla bieżącej platformy jest tworzony plik wykonywalny. Wszystkie NuGet, które mają zależności specyficzne dla platformy docelowej, są kopiowane do folderu publish. Jeśli nie potrzebujesz pliku wykonywalnego specyficznego dla platformy, możesz określić go <UseAppHost>False</UseAppHost> w pliku projektu. Aby uzyskać więcej informacji, zobacz MSBuild dla projektów zestawu SDK platformy .NET.

Zalety

  • Małe wdrożenie
    Dystrybuowana jest tylko aplikacja i jej zależności. Środowisko uruchomieniowe i biblioteki .NET są instalowane przez użytkownika, a wszystkie aplikacje współużytkują środowisko uruchomieniowe.

  • Wiele platform
    Twoja aplikacja i dowolny . Biblioteka oparta na sieci NET działa w innych systemach operacyjnych. Nie trzeba definiować platformy docelowej dla aplikacji. Aby uzyskać informacje o formacie pliku .NET, zobacz Format pliku zestawu .NET.

  • Używa najnowszego środowiska uruchomieniowego z poprawkami
    Aplikacja używa najnowszego środowiska uruchomieniowego (w docelowej rodzinie wersji głównych i pomocniczych .NET) zainstalowanego w systemie docelowym. Oznacza to, że aplikacja automatycznie używa najnowszej poprawionej wersji środowiska uruchomieniowego .NET. To zachowanie domyślne można przesłonić. Aby uzyskać więcej informacji, zobacz aplikacje zależne od struktury.

Wady

  • Wymaga wstępnej instalacji środowiska uruchomieniowego
    Aplikację można uruchomić tylko wtedy, gdy wersja programu .NET, dla których jest już zainstalowana twoja aplikacja, jest już zainstalowana w systemie hosta. Możesz skonfigurować zachowanie przekierowywało dla aplikacji, aby wymagała określonej wersji programu .NET lub zezwalała na nowszą wersję programu .NET. Aby uzyskać więcej informacji, zobacz aplikacje zależne od struktury.

  • .NET może ulec zmianie
    Istnieje możliwość zaktualizowania środowiska uruchomieniowego i bibliotek .NET na maszynie, na której jest uruchamiana aplikacja. W rzadkich przypadkach może to zmienić zachowanie aplikacji, jeśli używasz bibliotek .NET, co robi większość aplikacji. Możesz skonfigurować sposób, w jaki aplikacja używa nowszej wersji programu .NET. Aby uzyskać więcej informacji, zobacz aplikacje zależne od struktury.

Następująca wada dotyczy tylko zestawu SDK platformy .NET Core 2.1.

  • Użyj polecenia dotnet , aby uruchomić aplikację
    Użytkownicy muszą uruchomić polecenie dotnet <filename.dll> , aby uruchomić aplikację. Zestaw SDK platformy .NET Core 2.1 nie zawiera plików wykonywalnych specyficznych dla platformy dla opublikowanych aplikacji zależnych od struktury.

Przykłady

Publikowanie aplikacji zależnej od platformy międzyplatformowej. Plik wykonywalny przeznaczony dla bieżącej platformy jest tworzony wraz z plikiem dll .

dotnet publish

Publikowanie aplikacji zależnej od platformy międzyplatformowej. 64-bitowy plik wykonywalny systemu Linux jest tworzony wraz z plikiem dll . To polecenie nie działa z zestaw .NET Core SDK 2.1.

dotnet publish -r linux-x64 --self-contained false

Publikowanie samodzielne

Opublikowanie aplikacji jako samodzielnej tworzy plik wykonywalny specyficzny dla platformy. Wyjściowy folder publikowania zawiera wszystkie składniki aplikacji, w tym biblioteki .NET i docelowe środowisko uruchomieniowe. Aplikacja jest izolowana od innych aplikacji .NET i nie używa lokalnie zainstalowanego udostępnionego środowiska uruchomieniowego. Użytkownik aplikacji nie musi pobierać i instalować programu .NET.

Plik binarny pliku wykonywalnego jest wytwarzanych dla określonej platformy docelowej. Jeśli na przykład masz aplikację o nazwie word_reader i opublikujesz samodzielny plik wykonywalny dla Windows, zostanie utworzony word_reader.exewykonywalny. Publikowanie dla systemu Linux lub macOS word_reader pliku . Docelowa platforma i architektura są określane za pomocą parametru -r <RID> dla dotnet publish polecenia . Aby uzyskać więcej informacji na temat identyfikatorów RID, zobacz Katalog identyfikatorów RID .NET.

Jeśli aplikacja ma zależności specyficzne dla platformy, takie jak pakiet NuGet zawierający zależności specyficzne dla platformy, są one kopiowane do folderu publish wraz z aplikacją.

Zalety

  • Kontrolowanie wersji programu .NET
    Możesz kontrolować, która wersja programu .NET jest wdrażana z twoją aplikacją.

  • Ukierunkowanie na platformę
    Ponieważ musisz opublikować aplikację dla każdej platformy, wiesz, gdzie aplikacja będzie działać. Jeśli platforma .NET wprowadza nową platformę, użytkownicy nie mogą uruchamiać aplikacji na tej platformie, dopóki nie wydasz wersji przeznaczonej dla tej platformy. Możesz przetestować aplikację pod kątem problemów ze zgodnością, zanim użytkownicy będą uruchamiać aplikację na nowej platformie.

Wady

  • Większe wdrożenia
    Ponieważ aplikacja zawiera środowisko uruchomieniowe .NET i wszystkie zależności aplikacji, rozmiar pobierania i wymagane miejsce na dysku twardym są większe niż wersja zależna od struktury.

    Porada

    Rozmiar wdrożenia w systemach Linux można zmniejszyć o około 28 MB przy użyciu trybu niezmiennego globalizacji .NET. Wymusza to na aplikacji traktowanie wszystkich kultur jak niezmiennej kultury.

    Porada

    Przycinanie IL może dodatkowo zmniejszyć rozmiar wdrożenia.

  • Trudniejszy do zaktualizowania wersji programu .NET
    Środowisko uruchomieniowe .NET (dystrybuowane razem z aplikacją) można uaktualnić tylko przez wydanie nowej wersji aplikacji. Jednak w razie potrzeby program .NET zaktualizuje krytyczne poprawki zabezpieczeń dla biblioteki struktury na maszynie, na których działa aplikacja. W przypadku tego scenariusza poprawki zabezpieczeń użytkownik jest odpowiedzialny za end-to-end validation.

Przykłady

Samodzielne publikowanie aplikacji. Zostanie utworzony 64-bitowy plik wykonywalny systemu macOS.

dotnet publish -r osx-x64

Samodzielne publikowanie aplikacji. Zostanie Windows 64-bitowy plik wykonywalny.

dotnet publish -r win-x64

Publikowanie za pomocą obrazów ReadyToRun

Publikowanie za pomocą obrazów ReadyToRun poprawi czas uruchamiania aplikacji kosztem zwiększenia rozmiaru aplikacji. Aby opublikować za pomocą readyToRun, zobacz ReadyToRun , aby uzyskać więcej informacji.

Zalety

  • Udoskonalony czas uruchamiania
    Aplikacja będzie poświęcać mniej czasu na uruchamianie jiT.

Wady

  • Większy rozmiar
    Aplikacja będzie większa na dysku.

Przykłady

Opublikuj aplikację jako samodzielną i ReadyToRun. Zostanie utworzony 64-bitowy plik wykonywalny systemu macOS.

dotnet publish -c Release -r osx-x64 -p:PublishReadyToRun=true

Opublikuj aplikację jako samodzielną i ReadyToRun. Zostanie Windows 64-bitowy plik wykonywalny.

dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

Zobacz też