Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini berlaku untuk: ✔️ .NET 6 SDK dan versi yang lebih baru
Nama
dotnet publish - Menerbitkan aplikasi dan dependensinya ke folder untuk penyebaran ke sistem hosting.
Sinopsis
dotnet publish [<PROJECT>|<SOLUTION>|<FILE>] [-a|--arch <ARCHITECTURE>]
[--artifacts-path <ARTIFACTS_DIR>]
[-c|--configuration <CONFIGURATION>] [--disable-build-servers]
[-f|--framework <FRAMEWORK>] [--force] [--interactive]
[--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
[--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
[--os <OS>] [-p|--property:<PROPERTYNAME>=<VALUE>]
[-r|--runtime <RUNTIME_IDENTIFIER>]
[--sc|--self-contained] [--no-self-contained]
[-s|--source <SOURCE>] [--tl:[auto|on|off]]
[--ucr|--use-current-runtime]
[-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]
dotnet publish -h|--help
Deskripsi
dotnet publish mengkompilasi aplikasi, membaca dependensinya yang ditentukan dalam file proyek, dan menerbitkan kumpulan file yang dihasilkan ke direktori. Output mencakup aset berikut:
- Kode Bahasa Perantara (IL) dalam rakitan dengan ekstensi dll
. - File .deps.json yang menyertakan semua dependensi proyek.
- File .runtimeconfig.json yang menentukan runtime bersama yang diharapkan aplikasi, serta opsi konfigurasi lainnya untuk runtime (misalnya, jenis pengumpulan sampah).
- Dependensi aplikasi, yang disalin dari cache NuGet ke dalam folder output.
Output perintah dotnet publish siap untuk penyebaran ke sistem hosting (misalnya, server, PC, Mac, laptop) untuk eksekusi. Ini adalah satu-satunya cara yang didukung secara resmi untuk menyiapkan aplikasi untuk penyebaran. Tergantung pada jenis penyebaran yang ditentukan proyek, sistem hosting mungkin atau mungkin tidak memiliki runtime bersama .NET yang terinstal di dalamnya. Untuk informasi selengkapnya, lihat Gambaran umum penerbitan aplikasi .NET.
Pemulihan implisit
Anda tidak perlu menjalankan dotnet restore karena dijalankan secara implisit oleh semua perintah yang mengharuskan pemulihan terjadi, seperti dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish, dan dotnet pack. Untuk menonaktifkan pemulihan implisit, gunakan opsi --no-restore.
Perintah dotnet restore masih berguna dalam skenario tertentu di mana pemulihan secara eksplisit masuk akal, seperti build integrasi berkelanjutan di Azure DevOps Services atau dalam sistem build yang perlu secara eksplisit mengontrol kapan pemulihan terjadi.
Untuk informasi tentang cara mengelola umpan NuGet, lihat dokumentasi dotnet restore.
MSBuild
Perintah dotnet publish memanggil MSBuild, yang memanggil target Publish. Jika properti
Parameter apa pun yang diteruskan ke dotnet publish diteruskan ke MSBuild. Parameter -c dan -o masing-masing dipetakan ke properti Configuration dan PublishDir MSBuild.
Perintah dotnet publish menerima opsi MSBuild, seperti -p untuk mengatur properti dan -l untuk menentukan pencatat. Misalnya, Anda dapat mengatur properti MSBuild dengan menggunakan format: -p:<NAME>=<VALUE>.
File .pubxml
Anda juga dapat mengatur properti terkait penerbitan dengan merujuk ke file .pubxml. Misalnya:
dotnet publish -p:PublishProfile=FolderProfile
Contoh sebelumnya menggunakan file FolderProfile.pubxml yang ditemukan di folder <project_folder>/Properties/PublishProfiles. Jika Anda menentukan jalur dan ekstensi file saat mengatur properti PublishProfile, jalur tersebut akan diabaikan. MSBuild secara default terlihat di folder Properti PublishProfileFullPath alih-alih properti PublishProfile.
Dalam file .pubxml
-
PublishUrldigunakan oleh Visual Studio untuk menunjukkan target Terbitkan. -
PublishDirdigunakan oleh CLI untuk menunjukkan target Terbitkan.
Jika Anda ingin skenario berfungsi di semua tempat, Anda dapat menginisialisasi kedua properti ini ke nilai yang sama dalam file .pubxml. Ketika masalah GitHub dotnet/sdk#20931 diselesaikan, hanya salah satu properti ini yang perlu diatur.
Beberapa properti dalam file .pubxml dotnet publish adalah properti berikut yang memengaruhi build:
LastUsedBuildConfigurationConfigurationPlatformLastUsedPlatformTargetFrameworkTargetFrameworksRuntimeIdentifierRuntimeIdentifiers
Properti MSBuild
Properti MSBuild berikut mengubah output dotnet publish.
PublishReadyToRunMengkompilasi rakitan aplikasi sebagai format ReadyToRun (R2R). R2R adalah bentuk kompilasi ahead-of-time (AOT). Untuk informasi selengkapnya, lihat gambar ReadyToRun.
Untuk melihat peringatan tentang dependensi yang hilang yang dapat menyebabkan kegagalan runtime, gunakan
PublishReadyToRunShowWarnings=true.Kami menyarankan agar Anda menentukan
PublishReadyToRundalam profil penerbitan daripada pada baris perintah.PublishSingleFileMengemas aplikasi ke dalam file tunggal khusus platform yang dapat dieksekusi. Untuk informasi selengkapnya tentang penerbitan file tunggal, lihat dokumen desain bunder file tunggal . Ketika properti ini diatur ke
true,PublishSelfContainedproperti secara implisit diatur ketrue.Kami menyarankan agar Anda menentukan opsi ini dalam file proyek daripada pada baris perintah.
PublishTrimmedMemangkas pustaka yang tidak digunakan untuk mengurangi ukuran penyebaran aplikasi saat menerbitkan executable mandiri. Untuk informasi selengkapnya, lihat Memangkas penyebaran mandiri dan executable. Tersedia sejak .NET 6 SDK.
Kami menyarankan agar Anda menentukan opsi ini dalam file proyek daripada pada baris perintah.
Untuk informasi selengkapnya, lihat sumber daya berikut ini:
- referensi baris perintah MSBuild
- Visual Studio menerbitkan profil (.pubxml) untuk penyebaran aplikasi ASP.NET Core
- msbuild dotnet
Unduhan manifes beban kerja
Saat Anda menjalankan perintah ini, perintah ini memulai unduhan latar belakang asinkron manifes iklan untuk beban kerja. Jika unduhan masih berjalan ketika perintah ini selesai, unduhan dihentikan. Untuk informasi selengkapnya, lihat manifes Advertising.
Argumen
PROJECT | SOLUTION | FILE
File proyek atau solusi atau C# (aplikasi berbasis file) untuk dioperasikan. Jika file tidak ditentukan, MSBuild mencari direktori saat ini untuk proyek atau solusi.
PROJECTadalah jalur dan nama file file proyek C#, F#, atau Visual Basic, atau jalur ke direktori yang berisi file proyek C#, F#, atau Visual Basic.SOLUTIONadalah jalur dan nama file file solusi ( ekstensi.sln atau .slnx), atau jalur ke direktori yang berisi file solusi.FILEadalah argumen yang ditambahkan dalam .NET 10. Jalur dan nama file aplikasi berbasis file. Aplikasi berbasis file terkandung dalam satu file yang dibangun dan dijalankan tanpa file proyek (.csproj) yang sesuai. Untuk informasi selengkapnya, lihat Membangun aplikasi C# berbasis file.
Opsi
-
-a|--arch <ARCHITECTURE>Menentukan arsitektur target. Ini adalah sintaks singkat untuk mengatur Runtime Identifier (RID), di mana nilai yang disediakan dikombinasikan dengan RID default. Misalnya, pada komputer
win-x64, menentukan--arch x86mengatur RID kewin-x86. Jika Anda menggunakan opsi ini, jangan gunakan opsi-r|--runtime. Tersedia sejak Pratinjau .NET 6 7. -
--artifacts-path <ARTIFACTS_DIR>Semua file output build dari perintah yang dijalankan akan masuk ke subfolder di bawah jalur yang ditentukan, dipisahkan oleh proyek. Untuk informasi selengkapnya, lihat Tata Letak Output Artefak . Tersedia sejak .NET 8 SDK.
-
-c|--configuration <CONFIGURATION>Menentukan konfigurasi build. Jika Anda mengembangkan dengan .NET 8 SDK atau versi yang lebih baru, perintah menggunakan konfigurasi
Releasesecara default untuk proyek yang TargetFramework-nya diatur kenet8.0atau versi yang lebih baru. Konfigurasi build defaultDebuguntuk versi SDK yang lebih lama dan untuk kerangka kerja target sebelumnya. Anda dapat mengambil alih default dalam pengaturan proyek atau dengan menggunakan opsi ini. Untuk informasi selengkapnya, lihat 'penerbitan dotnet' menggunakan konfigurasi Rilis dan 'paket dotnet' menggunakan konfigurasi Rilis. -
--disable-build-serversMemaksa perintah untuk mengabaikan server build persisten apa pun. Opsi ini menyediakan cara yang konsisten untuk menonaktifkan semua penggunaan penembolokan build, yang memaksa build dari awal. Build yang tidak mengandalkan cache berguna ketika cache mungkin rusak atau salah karena beberapa alasan. Tersedia sejak .NET 7 SDK.
-f|--framework <FRAMEWORK>Menerbitkan aplikasi untuk kerangka kerja target yang ditentukan. Anda harus menentukan kerangka kerja target dalam file proyek.
--forceMemaksa semua dependensi untuk diselesaikan meskipun pemulihan terakhir berhasil. Menentukan bendera ini sama dengan menghapus file project.assets.json.
-
--interactiveMemungkinkan perintah berhenti dan menunggu input atau tindakan pengguna. Misalnya, untuk menyelesaikan autentikasi.
--manifest <PATH_TO_MANIFEST_FILE>Menentukan satu atau beberapa manifes target digunakan untuk memangkas kumpulan paket yang diterbitkan dengan aplikasi. File manifes adalah bagian dari output perintah
dotnet store. Untuk menentukan beberapa manifes, tambahkan opsi--manifestuntuk setiap manifes.--no-buildTidak membangun proyek sebelum menerbitkan. Ini juga secara implisit mengatur bendera
--no-restore.--no-dependenciesMengabaikan referensi proyek-ke-proyek dan hanya memulihkan proyek akar.
--nologoTidak menampilkan banner startup atau pesan hak cipta.
--no-restoreTidak menjalankan pemulihan implisit saat menjalankan perintah.
-o|--output <OUTPUT_DIRECTORY>Menentukan jalur untuk direktori output.
Jika tidak ditentukan, defaultnya adalah [project_file_folder]/bin/[configuration]/[framework]/publish/ untuk biner executable dan lintas platform yang bergantung pada kerangka kerja. Ini default untuk [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ untuk executable mandiri.
Dalam proyek web, jika folder output berada di folder proyek, perintah
dotnet publishberturut-turut menghasilkan folder output berlapis. Misalnya, jika folder proyek proyek saya , dan folder output penerbitan myproject/publish, dan Anda menjalankandotnet publishdua kali, eksekusi kedua menempatkan file konten seperti file .config dan .json di myproject/publish/publish. Untuk menghindari berlapisnya folder publikasi, tentukan folder terbitkan yang tidak langsung di bawah folder proyek, atau kecualikan folder terbitkan dari proyek. Untuk mengecualikan folder terbitkan bernamapublishoutput , tambahkan elemen berikut ke elemendalam file .csproj: <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>.NET 7.0.200 SDK dan yang lebih baru
Jika Anda menentukan opsi
--outputsaat menjalankan perintah ini pada solusi, CLI akan mengeluarkan peringatan (kesalahan dalam 7.0.200) karena semantik jalur output yang tidak jelas. Opsi--outputtidak diizinkan karena semua output dari semua proyek yang dibuat akan disalin ke direktori yang ditentukan, yang tidak kompatibel dengan proyek multi-target, serta proyek yang memiliki versi dependensi langsung dan transitif yang berbeda. Untuk informasi selengkapnya, lihat opsi--outputtingkat solusi tidak lagi valid untuk perintah terkait build..NET Core 3.x SDK dan yang lebih baru
Jika Anda menentukan jalur relatif saat menerbitkan proyek, direktori output yang dihasilkan relatif terhadap direktori kerja saat ini, bukan ke lokasi file proyek.
Jika Anda menentukan jalur relatif saat menerbitkan solusi, semua output untuk semua proyek masuk ke folder yang ditentukan relatif terhadap direktori kerja saat ini. Untuk membuat output penerbitan masuk ke folder terpisah untuk setiap proyek, tentukan jalur relatif dengan menggunakan properti
PublishDirmsbuild alih-alih opsi--output. Misalnya,dotnet publish -p:PublishDir=.\publishmengirim output penerbitan untuk setiap proyek ke folderpublishdi bawah folder yang berisi file proyek.
-
--os <OS>Menentukan sistem operasi target (OS). Ini adalah sintaks singkat untuk mengatur Runtime Identifier (RID), di mana nilai yang disediakan dikombinasikan dengan RID default. Misalnya, pada komputer
win-x64, menentukan--os linuxmengatur RID kelinux-x64. Jika Anda menggunakan opsi ini, jangan gunakan opsi-r|--runtime. Tersedia sejak .NET 6. -
--sc|--self-containedTerbitkan runtime .NET dengan aplikasi Anda sehingga runtime tidak perlu diinstal pada komputer target.
-p|--property:<PROPERTYNAME>=<VALUE>Mengatur satu atau beberapa properti MSBuild. Tentukan beberapa properti yang dibatasi oleh titik koma atau dengan mengulangi opsi:
--property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2> --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>-
--no-self-containedTerbitkan aplikasi Anda sebagai aplikasi yang bergantung pada kerangka kerja. Runtime .NET yang kompatibel harus diinstal pada komputer target untuk menjalankan aplikasi Anda.
--source <SOURCE>URI sumber paket NuGet untuk digunakan selama operasi pemulihan.
-r|--runtime <RUNTIME_IDENTIFIER>Menerbitkan aplikasi untuk runtime tertentu. Untuk daftar Pengidentifikasi Runtime (RID), lihat katalog RID. Untuk informasi selengkapnya, lihat Gambaran umum penerbitan aplikasi .NET. Jika Anda menggunakan opsi ini, gunakan
--self-containedatau--no-self-containedjuga.-
--tl:[auto|on|off]Menentukan apakah Terminal Logger harus digunakan untuk output build. Defaultnya adalah
auto, yang terlebih dahulu memverifikasi lingkungan sebelum mengaktifkan pengelogan terminal. Pemeriksaan lingkungan memverifikasi bahwa terminal mampu menggunakan fitur output modern dan tidak menggunakan output standar yang dialihkan sebelum mengaktifkan pencatat baru.onmelewati pemeriksaan lingkungan dan mengaktifkan pengelogan terminal.offmelewati pemeriksaan lingkungan dan menggunakan pencatat konsol default.Terminal Logger menunjukkan fase pemulihan diikuti oleh fase build. Selama setiap fase, proyek bangunan saat ini muncul di bagian bawah terminal. Setiap proyek yang membangun menghasilkan target MSBuild yang saat ini sedang dibangun dan jumlah waktu yang dihabiskan untuk target tersebut. Anda dapat mencari informasi ini untuk mempelajari lebih lanjut tentang build. Setelah proyek selesai dibangun, satu bagian "build completed" ditulis yang menangkap:
- Nama proyek bawaan.
- Kerangka kerja target (jika multi-target).
- Status build tersebut.
- Output utama build tersebut (yang di-hyperlink).
- Diagnostik apa pun yang dihasilkan untuk proyek tersebut.
Opsi ini tersedia mulai dari .NET 8.
-
--ucr|--use-current-runtimeGunakan runtime saat ini sebagai runtime target.
-
-v|--verbosity <LEVEL>Mengatur tingkat verbositas perintah. Nilai yang diizinkan adalah
q[uiet],m[inimal],n[ormal],d[etailed], dandiag[nostic]. Defaultnya adalahminimal. Untuk informasi selengkapnya, lihat LoggerVerbosity. --version-suffix <VERSION_SUFFIX>Menentukan akhiran versi untuk mengganti tanda bintang (
*) di bidang versi file proyek.-
-?|-h|--helpMencetak deskripsi cara menggunakan perintah.
Contoh
Buat biner lintas platform yang bergantung pada kerangka kerja
untuk proyek di direktori saat ini: dotnet publishDimulai dengan .NET Core 3.0 SDK, contoh ini juga membuat yang dapat dieksekusi tergantung kerangka kerja
untuk platform saat ini. Buat yang dapat dieksekusi mandiri
untuk proyek di direktori saat ini, untuk runtime tertentu: dotnet publish --runtime osx-x64RID harus berada dalam file proyek.
Buat yang dapat dieksekusi tergantung kerangka kerja
untuk proyek di direktori saat ini, untuk platform tertentu: dotnet publish --runtime osx-x64 --self-contained falseRID harus berada dalam file proyek. Contoh ini berlaku untuk .NET Core 3.0 SDK dan versi yang lebih baru.
Terbitkan proyek di direktori saat ini, untuk runtime tertentu dan kerangka kerja target:
dotnet publish --framework net8.0 --runtime osx-x64Terbitkan file proyek yang ditentukan:
dotnet publish ~/projects/app1/app1.csprojTerbitkan aplikasi saat ini tetapi jangan pulihkan referensi project-to-project (P2P), hanya proyek akar selama operasi pemulihan:
dotnet publish --no-dependenciesTerbitkan program C# berbasis file app.cs di direktori saat ini:
dotnet publish app.csDukungan program berbasis file ditambahkan di .NET SDK 10.0.100.
Lihat juga
- gambaran umum penerbitan aplikasi .NET
- kerangka kerja Target
- katalog
Runtime Identifier (RID) - Kontainerisasi aplikasi .NET dengan penerbitan dotnet
- Bekerja dengan Notarisasi macOS Catalina
- Struktur Direktori dari aplikasi yang diterbitkan
- referensi baris perintah MSBuild
- Visual Studio menerbitkan profil (.pubxml) untuk penyebaran aplikasi ASP.NET Core
- msbuild dotnet
- Pangkas penyebaran mandiri