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>.exe
dengan . 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.
Mengonfigurasi perilaku pencarian penginstalan .NET
Di .NET 9 dan versi yang lebih baru, Anda dapat mengonfigurasi jalur pencarian penginstalan .NET dari executable yang diterbitkan melalui AppHostDotNetSearch
properti dan AppHostRelativeDotNet
.
AppHostDotNetSearch
memungkinkan menentukan satu atau beberapa lokasi di mana executable akan mencari penginstalan .NET:
AppLocal
: folder aplikasi yang dapat dieksekusiAppRelative
: jalur relatif terhadap aplikasi yang dapat dieksekusiEnvironmentVariables
: nilaiDOTNET_ROOT[_<arch>]
variabel lingkunganGlobal
: lokasi penginstalan global terdaftar dan default
AppHostRelativeDotNet
menentukan jalur relatif terhadap executable yang akan dicari saat AppHostDotNetSearch
berisi AppRelative
.
Untuk informasi selengkapnya, lihat AppHostDotNetSearch
, AppHostRelativeDotNet
dan instal opsi lokasi di apphost.
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.