Share via


Menerbitkan aplikasi .NET dengan .NET CLI

Artikel ini menunjukkan bagaimana Anda dapat menerbitkan aplikasi .NET anda dari baris perintah. .NET menyediakan tiga cara untuk menerbitkan aplikasi Anda. Penyebaran yang bergantung pada kerangka kerja menghasilkan file .dll lintas platform yang menggunakan runtime .NET yang diinstal secara lokal. Executable yang bergantung pada kerangka kerja menghasilkan executable khusus platform yang menggunakan runtime .NET yang diinstal secara lokal. Executable mandiri menghasilkan executable khusus platform dan menyertakan salinan lokal runtime .NET.

Untuk gambaran umum mode penerbitan ini, lihat Penyebaran Aplikasi .NET.

Mencari bantuan cepat dalam menggunakan CLI? Tabel berikut ini memperlihatkan beberapa contoh cara menerbitkan aplikasi Anda. Anda dapat menentukan kerangka kerja target dengan -f <TFM> parameter atau dengan mengedit file proyek. Untuk informasi selengkapnya, lihat Dasar-dasar penerbitan.

Mode Terbitkan Perintah
Penyebaran yang bergantung pada kerangka kerja dotnet publish -c Release -p:UseAppHost=false
Dapat dieksekusi tergantung kerangka kerja dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
Penyebaran mandiri dotnet publish -c Release -r <RID> --self-contained true

Catatan

  • Parameter -c Release tidak diperlukan. Ini disediakan sebagai pengingat untuk menerbitkan build Rilis aplikasi Anda.
  • Di .NET SDK 3.1 atau yang lebih tinggi, yang dapat dieksekusi tergantung kerangka kerja adalah mode penerbitan default saat menjalankan perintah dasar dotnet publish .

Dasar-dasar penerbitan

Pengaturan <TargetFramework> file proyek menentukan kerangka kerja target default saat Anda menerbitkan aplikasi Anda. Anda dapat mengubah kerangka kerja target menjadi Moniker Kerangka Kerja Target (TFM) yang valid. Misalnya, jika proyek Anda menggunakan <TargetFramework>net8.0</TargetFramework>, biner yang menargetkan .NET 8 dibuat. TFM yang ditentukan dalam pengaturan ini adalah target default yang digunakan oleh dotnet publish perintah .

Jika Anda ingin menargetkan lebih dari satu kerangka kerja, Anda dapat mengatur <TargetFrameworks> pengaturan ke beberapa nilai TFM, dipisahkan oleh titik koma. Saat Anda membuat aplikasi, build diproduksi untuk setiap kerangka kerja target. Namun, saat memublikasikan aplikasi, Anda harus menentukan kerangka kerja target dengan dotnet publish -f <TFM> perintah .

Mode BUILD-CONFIGURATION default adalah Debug kecuali diubah dengan -c parameter .

Direktori output default perintah dotnet publish adalah ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/. Misalnya, dotnet publish -c Release -f net8.0 menerbitkan ke ./bin/Release/net8.0/publish/. Namun, Anda dapat memilih jalur output dan struktur folder yang disederhanakan untuk semua output build. Untuk informasi selengkapnya, lihat Tata letak output Artefak.

Dependensi asli

Jika aplikasi Anda memiliki dependensi asli, aplikasi mungkin tidak berjalan pada sistem operasi yang berbeda. Misalnya, jika aplikasi Anda menggunakan Windows API asli, aplikasi tersebut tidak akan berjalan di macOS atau Linux. Anda harus menyediakan kode khusus platform dan mengkompilasi executable untuk setiap platform.

Pertimbangkan juga, jika pustaka yang Anda referensikan memiliki dependensi asli, aplikasi Anda mungkin tidak berjalan di setiap platform. Namun, ada kemungkinan paket NuGet yang Anda rujuk telah menyertakan versi khusus platform untuk menangani dependensi asli yang diperlukan untuk Anda.

Saat mendistribusikan aplikasi dengan dependensi asli, Anda mungkin perlu menggunakan dotnet publish -r <RID> sakelar untuk menentukan platform target yang ingin Anda terbitkan. Untuk daftar pengidentifikasi runtime, lihat Katalog Pengidentifikasi Runtime (RID).

Informasi selengkapnya tentang biner khusus platform tercakup dalam bagian penyebaran yang dapat dieksekusi tergantung Kerangka Kerja dan Mandiri.

Aplikasi sampel

Anda dapat menggunakan aplikasi berikut untuk menjelajahi perintah penerbitan. Aplikasi ini dibuat dengan menjalankan perintah berikut di terminal Anda:

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

File Program.cs atau Program.vb yang dihasilkan oleh templat konsol perlu diubah ke yang berikut:

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

Saat Anda menjalankan aplikasi (dotnet run), output berikut ditampilkan:

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

Penyebaran yang bergantung pada kerangka kerja

Saat Anda memublikasikan aplikasi sebagai FDD, <PROJECT-NAME>.dll file dibuat di ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/ folder . Untuk menjalankan aplikasi Anda, navigasikan ke folder output dan gunakan dotnet <PROJECT-NAME>.dll perintah .

Aplikasi Anda dikonfigurasi untuk menargetkan versi .NET tertentu. Runtime .NET yang ditargetkan harus berada di komputer mana pun tempat aplikasi Anda berjalan. Misalnya, jika aplikasi Anda menargetkan .NET Core 8, komputer apa pun yang dijalankan aplikasi Anda harus menginstal runtime .NET Core 8. Seperti yang dinyatakan di bagian Dasar penerbitan, Anda dapat mengedit file proyek untuk mengubah kerangka kerja target default atau untuk menargetkan lebih dari satu kerangka kerja.

Menerbitkan FDD membuat aplikasi yang secara otomatis diteruskan ke patch keamanan .NET terbaru yang tersedia pada sistem yang menjalankan aplikasi. Untuk informasi selengkapnya tentang pengikatan versi pada waktu kompilasi, lihat Memilih versi .NET yang akan digunakan.

Mode Terbitkan Perintah
Penyebaran yang bergantung pada kerangka kerja dotnet publish -c Release -p:UseAppHost=false

Dapat dieksekusi tergantung kerangka kerja

Framework-dependent executable (FDE) adalah mode default untuk perintah dasar dotnet publish . Anda tidak perlu menentukan parameter lain, selama Anda ingin menargetkan sistem operasi saat ini.

Dalam mode ini, host yang dapat dieksekusi khusus platform dibuat untuk menghosting aplikasi lintas platform Anda. Mode ini mirip dengan FDD, karena FDD memerlukan host dalam bentuk dotnet perintah. Nama file host yang dapat dieksekusi bervariasi per platform dan diberi nama sesuatu yang mirip <PROJECT-FILE>.exedengan . Anda dapat menjalankan executable ini secara langsung alih-alih memanggil dotnet <PROJECT-FILE>.dll, yang masih merupakan cara yang dapat diterima untuk menjalankan aplikasi.

Aplikasi Anda dikonfigurasi untuk menargetkan versi .NET tertentu. Runtime .NET yang ditargetkan harus berada di komputer mana pun tempat aplikasi Anda berjalan. Misalnya, jika aplikasi Anda menargetkan .NET 8, komputer apa pun yang dijalankan aplikasi Anda harus menginstal runtime .NET 8. Seperti yang dinyatakan di bagian Dasar penerbitan, Anda dapat mengedit file proyek untuk mengubah kerangka kerja target default atau untuk menargetkan lebih dari satu kerangka kerja.

Menerbitkan FDE membuat aplikasi yang secara otomatis diteruskan ke patch keamanan .NET terbaru yang tersedia pada sistem yang menjalankan aplikasi. Untuk informasi selengkapnya tentang pengikatan versi pada waktu kompilasi, lihat Memilih versi .NET yang akan digunakan.

Mode Terbitkan Perintah
Dapat dieksekusi tergantung kerangka kerja dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release

Setiap kali Anda menggunakan sakelar -r , jalur folder output berubah menjadi: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/

Jika Anda menggunakan contoh aplikasi, jalankan dotnet publish -f net6.0 -r win-x64 --self-contained false. Perintah ini membuat executable berikut: ./bin/Debug/net6.0/win-x64/publish/apptest1.exe

Catatan

Anda dapat mengurangi ukuran total penyebaran anda dengan mengaktifkan mode invariant globalisasi. Mode ini berguna untuk aplikasi yang tidak sadar secara global dan dapat menggunakan konvensi pemformatan, konvensi casing, dan perbandingan string dan urutan urutan kultur invarian. Untuk informasi selengkapnya tentang mode globalisasi invarian dan cara mengaktifkannya, lihat Mode Invarian Globalisasi .NET.

Penyebaran mandiri

Saat Anda menerbitkan penyebaran mandiri (SCD), .NET SDK membuat executable khusus platform. Menerbitkan SCD menyertakan semua file .NET yang diperlukan untuk menjalankan aplikasi Anda tetapi tidak menyertakan dependensi asli .NET (misalnya, untuk .NET 6 di Linux atau .NET 8 di Linux). Dependensi ini harus ada pada sistem sebelum aplikasi berjalan.

Menerbitkan SCD membuat aplikasi yang tidak diteruskan ke patch keamanan .NET terbaru yang tersedia. Untuk informasi selengkapnya tentang pengikatan versi pada waktu kompilasi, lihat Memilih versi .NET yang akan digunakan.

Anda harus menggunakan sakelar berikut dengan dotnet publish perintah untuk menerbitkan SCD:

  • -r <RID>

    Sakelar ini menggunakan pengidentifikasi (RID) untuk menentukan platform target. Untuk daftar pengidentifikasi runtime, lihat Katalog Pengidentifikasi Runtime (RID).

  • --self-contained true

    Sakelar ini memberi tahu .NET SDK untuk membuat executable sebagai SCD.

Mode Terbitkan Perintah
Penyebaran mandiri dotnet publish -c Release -r <RID> --self-contained true

Tip

  • Di .NET 6 dan versi yang lebih baru, Anda dapat mengurangi ukuran total aplikasi mandiri yang kompatibel dengan menerbitkan yang dipangkas. Ini memungkinkan pemangkas untuk menghapus bagian kerangka kerja dan rakitan yang direferensikan yang tidak ada di jalur kode apa pun atau berpotensi direferensikan dalam refleksi runtime. Lihat pemangkasan ketidaksesuaian untuk menentukan apakah pemangkasan masuk akal untuk aplikasi Anda.
  • Anda dapat mengurangi ukuran total penyebaran anda dengan mengaktifkan mode invariant globalisasi. Mode ini berguna untuk aplikasi yang tidak sadar secara global dan dapat menggunakan konvensi pemformatan, konvensi casing, dan perbandingan string dan urutan urutan kultur invarian. Untuk informasi selengkapnya tentang mode globalisasi invarian dan cara mengaktifkannya, lihat Mode Invarian Globalisasi .NET Core.

Lihat juga