Gambaran umum penerbitan aplikasi .NET

Aplikasi yang Anda buat dengan .NET dapat dipublikasikan dalam dua mode berbeda, dan mode tersebut memengaruhi cara pengguna menjalankan aplikasi Anda.

Menerbitkan aplikasi Anda sebagai mandiri menghasilkan aplikasi yang mencakup runtime dan pustaka .NET, serta aplikasi Anda dan dependensinya. Pengguna aplikasi dapat menjalankannya di mesin yang tidak menginstal runtime .NET.

Menerbitkan aplikasi Anda sebagai perangkat yang bergantung pada kerangka kerja menghasilkan aplikasi yang hanya mencakup aplikasi Anda sendiri dan dependensinya. Pengguna aplikasi harus menginstal runtime .NET secara terpisah.

Kedua mode penerbitan menghasilkan executable khusus platform secara default. Aplikasi yang bergantung pada kerangka kerja dapat dibuat tanpa executable, dan aplikasi ini bersifat lintas platform.

Saat executable diproduksi, Anda dapat menentukan platform target dengan runtime identifier (RID). Untuk informasi selengkapnya tentang RID, lihat Katalog .NET RID.

Tabel berikut menguraikan perintah yang digunakan untuk menerbitkan aplikasi sebagai bergantung pada kerangka kerja atau mandiri, per versi SDK:

Jenis SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Perintah
executable yang bergantung pada kerangka kerja untuk platform saat ini. ✔️ ✔️ ✔️ dotnet publish
executable yang bergantung pada kerangka kerja untuk platform tertentu. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
biner lintas platform yang bergantung pada kerangka kerja. ✔️ ✔️ ✔️ ✔️ dotnet publish
executable mandiri. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Untuk informasi selengkapnya, lihat perintah .NET dotnet publish.

Menghasilkan executable

Executable tidak lintas platform. Mereka khusus untuk sistem operasi dan arsitektur CPU. Saat menerbitkan aplikasi dan membuat executable, Anda dapat memublikasikan aplikasi sebagai mandiri atau bergantung pada kerangka kerja. Menerbitkan aplikasi sebagai mandiri termasuk runtime .NET dengan aplikasi, dan pengguna aplikasi tidak perlu khawatir menginstal .NET sebelum menjalankan aplikasi. Aplikasi yang diterbitkan sebagai bergantung pada kerangka kerja tidak menyertakan runtime dan pustaka .NET; hanya aplikasi dan dependensi pihak ke-3 yang disertakan.

Perintah berikut menghasilkan executable:

Jenis SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Perintah
executable yang bergantung pada kerangka kerja untuk platform saat ini. ✔️ ✔️ ✔️ dotnet publish
executable yang bergantung pada kerangka kerja untuk platform tertentu. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
executable mandiri. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Menghasilkan biner lintas platform

Binari lintas platform dibuat saat Anda memublikasikan aplikasi anda sebagai framework-dependent, dalam bentuk file dll . File dll diberi nama setelah proyek Anda. Misalnya, jika Anda memiliki aplikasi bernama word_reader, file bernama word_reader.dll dibuat. Aplikasi yang diterbitkan dengan cara ini dijalankan dengan dotnet <filename.dll> perintah dan dapat dijalankan di platform apa pun.

Binari lintas platform dapat dijalankan pada sistem operasi apa pun selama runtime .NET yang ditargetkan sudah diinstal. Jika runtime .NET yang ditargetkan tidak diinstal, aplikasi dapat berjalan menggunakan runtime yang lebih baru jika aplikasi dikonfigurasi untuk melakukan roll-forward. Untuk informasi selengkapnya, lihat aplikasi yang bergantung pada kerangka kerja bergulir ke depan.

Perintah berikut menghasilkan biner lintas platform:

Jenis SDK 2.1 SDK 3.x SDK 5.0 SDK 6.0 Perintah
biner lintas platform yang bergantung pada kerangka kerja. ✔️ ✔️ ✔️ ✔️ dotnet publish

Publikasikan yang bergantung pada kerangka kerja

Aplikasi yang diterbitkan sebagai bergantung pada kerangka kerja bersifat lintas platform dan tidak menyertakan runtime .NET. Pengguna aplikasi Anda diharuskan menginstal runtime .NET.

Menerbitkan aplikasi sebagai framework-dependent menghasilkan biner lintas platform sebagai file dll , dan executable khusus platform yang menargetkan platform Anda saat ini. Dll adalah cross-platform sementara executable tidak. Misalnya, jika Anda memublikasikan aplikasi bernama word_reader dan menargetkan Windows, word_reader.exe executable dibuat bersama dengan word_reader.dll. Saat menargetkan Linux atau macOS, word_reader executable dibuat bersama dengan word_reader.dll. Untuk informasi selengkapnya tentang RID, lihat Katalog .NET RID.

Penting

.NET SDK 2.1 tidak menghasilkan executable khusus platform saat Anda menerbitkan perangkat yang bergantung pada kerangka kerja aplikasi.

Biner lintas platform aplikasi Anda dapat dijalankan dengan dotnet <filename.dll> perintah, dan dapat dijalankan di platform apa pun. Jika aplikasi menggunakan paket NuGet yang memiliki implementasi khusus platform, semua dependensi platform disalin ke folder penerbitan bersama dengan aplikasi.

Anda dapat membuat executable untuk platform tertentu dengan -r <RID> --self-contained false meneruskan parameter ke dotnet publish perintah. -r Ketika parameter dihilangkan, executable dibuat untuk platform Anda saat ini. Setiap paket NuGet yang memiliki dependensi khusus platform untuk platform yang ditargetkan disalin ke folder penerbitan. Jika Anda tidak memerlukan executable khusus platform, Anda dapat menentukan <UseAppHost>False</UseAppHost> dalam file proyek. Untuk informasi selengkapnya, lihat referensi MSBuild untuk proyek .NET SDK.

Kelebihan

  • Penyebaran kecil
    Hanya aplikasi Anda dan dependensinya yang didistribusikan. Runtime dan pustaka .NET diinstal oleh pengguna dan semua aplikasi berbagi runtime.

  • Lintas platform
    Aplikasi Anda dan aplikasi apa pun. Pustaka berbasis NET berjalan pada sistem operasi lainnya. Anda tidak perlu menentukan platform target untuk aplikasi Anda. Untuk informasi tentang format file .NET, lihat Format File Perakitan .NET.

  • Menggunakan runtime terbaru yang ditambal
    Aplikasi ini menggunakan runtime terbaru (dalam keluarga besar-minor yang ditargetkan dari .NET) yang diinstal pada sistem target. Ini berarti aplikasi Anda secara otomatis menggunakan versi terbaru yang ditambal dari runtime .NET. Perilaku default ini dapat diganti. Untuk informasi selengkapnya, lihat aplikasi yang bergantung pada kerangka kerja bergulir ke depan.

Kekurangan

  • Memerlukan pra-instal runtime
    Aplikasi Anda hanya dapat berjalan jika versi .NET target aplikasi Anda sudah diinstal pada sistem host. Anda dapat mengonfigurasi perilaku roll-forward agar aplikasi memerlukan versi .NET tertentu atau mengizinkan versi .NET yang lebih baru. Untuk informasi selengkapnya, lihat aplikasi yang bergantung pada kerangka kerja bergulir ke depan.

  • .NET dapat berubah
    Runtime dan pustaka .NET dapat diperbarui pada mesin tempat aplikasi dijalankan. Dalam kasus yang jarang terjadi, ini dapat mengubah perilaku aplikasi Anda jika Anda menggunakan pustaka .NET, yang dilakukan sebagian besar aplikasi. Anda dapat mengonfigurasi cara aplikasi Menggunakan versi .NET yang lebih baru. Untuk informasi selengkapnya, lihat aplikasi yang bergantung pada kerangka kerja bergulir ke depan.

Kerugian berikut hanya berlaku untuk .NET Core 2.1 SDK.

  • dotnet Menggunakan perintah untuk memulai aplikasi
    Pengguna harus menjalankan dotnet <filename.dll> perintah untuk memulai aplikasi Anda. .NET Core 2.1 SDK tidak menghasilkan executable khusus platform untuk aplikasi yang bergantung pada kerangka kerja yang dipublikasikan.

Contoh

Publikasikan aplikasi yang bergantung pada kerangka kerja lintas platform. Executable yang menargetkan platform Anda saat ini dibuat bersama dengan file dll .

dotnet publish

Publikasikan aplikasi yang bergantung pada kerangka kerja lintas platform. Sebuah Linux 64-bit executable dibuat bersama dengan file dll . Perintah ini tidak berfungsi dengan .NET Core SDK 2.1.

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

Publikasikan mandiri

Menerbitkan aplikasi Anda sebagai mandiri menghasilkan executable khusus platform. Folder penerbitan output berisi semua komponen aplikasi, termasuk pustaka .NET dan runtime target. Aplikasi ini diisolasi dari aplikasi .NET lainnya dan tidak menggunakan runtime bersama yang diinstal secara lokal. Pengguna aplikasi Anda tidak diharuskan mengunduh dan menginstal .NET.

Biner yang dapat dieksekusi diproduksi untuk platform target yang ditentukan. Misalnya, jika Anda memiliki aplikasi bernama word_reader, dan Anda menerbitkan executable mandiri untuk Windows, file word_reader.exe dibuat. Penerbitan untuk Linux atau macOS, file word_reader dibuat. Platform target dan arsitektur ditentukan dengan -r <RID> parameter untuk dotnet publish perintah. Untuk informasi selengkapnya tentang RID, lihat Katalog .NET RID.

Jika aplikasi memiliki dependensi khusus platform, seperti paket NuGet yang berisi dependensi khusus platform, ini disalin ke folder penerbitan bersama dengan aplikasi.

Kelebihan

  • Kontrol versi .NET
    Anda mengontrol versi .NET mana yang disebarkan dengan aplikasi Anda.

  • Penargetan khusus platform
    Karena Anda harus mempublikasikan aplikasi Anda untuk setiap platform, Anda tahu di mana aplikasi Anda akan berjalan. Jika .NET memperkenalkan platform baru, pengguna tidak dapat menjalankan aplikasi Anda di platform tersebut sampai Anda merilis versi yang menargetkan platform tersebut. Anda dapat menguji aplikasi untuk masalah kompatibilitas sebelum pengguna menjalankan aplikasi di platform baru.

Kekurangan

  • Penyebaran yang lebih besar
    Karena aplikasi Anda menyertakan runtime .NET dan semua dependensi aplikasi Anda, ukuran unduhan dan ruang hard drive yang diperlukan lebih besar daripada versi yang bergantung pada kerangka kerja .

    Tip

    Anda dapat mengurangi ukuran penyebaran Anda di sistem Linux sekitar 28 MB dengan menggunakan mode invarian globalisasi .NET. Ini memaksa aplikasi Anda untuk memperlakukan semua budaya seperti budaya invarian.

    Tip

    Pemangkasan IL dapat mengurangi ukuran penyebaran Anda lebih lanjut.

  • Lebih sulit untuk memperbarui versi .NET
    .NET Runtime (didistribusikan dengan aplikasi Anda) hanya dapat ditingkatkan dengan merilis versi baru aplikasi Anda. Namun, .NET akan memperbarui patch keamanan penting sesuai kebutuhan untuk pustaka kerangka kerja di mesin yang dijalankan aplikasi Anda. Anda bertanggung jawab untuk validasi ujung ke ujung untuk skenario patch keamanan ini.

Contoh

Publikasikan aplikasi mandiri. Executable macOS 64-bit dibuat.

dotnet publish -r osx-x64

Publikasikan aplikasi mandiri. Executable 64-bit Windows dibuat.

dotnet publish -r win-x64

Publikasikan dengan gambar ReadyToRun

Penerbitan dengan gambar ReadyToRun akan meningkatkan waktu startup aplikasi Anda dengan biaya meningkatkan ukuran aplikasi Anda. Untuk mempublikasikan dengan ReadyToRun lihat ReadyToRun untuk detail lebih lanjut.

Kelebihan

  • Waktu startup yang lebih baik
    Aplikasi akan menghabiskan lebih sedikit waktu menjalankan JIT.

Kekurangan

  • Ukuran lebih besar
    Aplikasi akan lebih besar pada disk.

Contoh

Publikasikan aplikasi mandiri dan ReadyToRun. Executable macOS 64-bit dibuat.

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

Publikasikan aplikasi mandiri dan ReadyToRun. Executable 64-bit Windows dibuat.

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

Lihat juga