penerbitan dotnet
Artikel ini berlaku untuk: ✔️ .NET Core 3.1 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>] [-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>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--sc|--self-contained [true|false]] [--no-self-contained]
[-s|--source <SOURCE>] [--tl:[auto|on|off]]
[--use-current-runtime, --ucr [true|false]]
[-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 Menerbitkan aplikasi .NET dengan .NET CLI.
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
-
PublishUrl
digunakan oleh Visual Studio untuk menunjukkan target Terbitkan. -
PublishDir
digunakan 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:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
Properti MSBuild
Properti MSBuild berikut mengubah output dotnet publish
.
PublishReadyToRun
Mengkompilasi 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
PublishReadyToRun
dalam profil penerbitan daripada pada baris perintah.PublishSingleFile
Mengemas aplikasi ke dalam file tunggal khusus platform yang dapat dieksekusi. Untuk informasi selengkapnya tentang penerbitan file tunggal, lihat dokumen desain bunder file tunggal .
Kami menyarankan agar Anda menentukan opsi ini dalam file proyek daripada pada baris perintah.
PublishTrimmed
Memangkas 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
Proyek atau solusi untuk diterbitkan.
PROJECT
adalah jalur dan nama file file proyek C#, F#, atau Visual Basic, atau jalur ke direktori yang berisi file proyek C#, F#, atau Visual Basic. Jika direktori tidak ditentukan, direktori tersebut default ke direktori saat ini.SOLUTION
adalah jalur dan nama file file solusi (ekstensi.sln), atau jalur ke direktori yang berisi file solusi. Jika direktori tidak ditentukan, direktori tersebut default ke direktori saat ini.
Pilihan
-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 x86
mengatur 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
Release
secara default untuk proyek yang TargetFramework-nya diatur kenet8.0
atau versi yang lebih baru. Konfigurasi build defaultDebug
untuk 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-servers
Memaksa 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.
--force
Memaksa semua dependensi untuk diselesaikan meskipun pemulihan terakhir berhasil. Menentukan bendera ini sama dengan menghapus file project.assets.json.
-?|-h|--help
Mencetak deskripsi cara menggunakan perintah.
--interactive
Memungkinkan perintah berhenti dan menunggu input atau tindakan pengguna. Misalnya, untuk menyelesaikan autentikasi. Tersedia sejak .NET Core 3.0 SDK.
--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--manifest
untuk setiap manifes.--no-build
Tidak membangun proyek sebelum menerbitkan. Ini juga secara implisit mengatur bendera
--no-restore
.--no-dependencies
Mengabaikan referensi proyek-ke-proyek dan hanya memulihkan proyek akar.
--nologo
Tidak menampilkan banner startup atau pesan hak cipta.
--no-restore
Tidak 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 publish
berturut-turut menghasilkan folder output berlapis. Misalnya, jika folder proyek proyek saya , dan folder output penerbitan myproject/publish, dan Anda menjalankandotnet publish
dua 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
--output
saat menjalankan perintah ini pada solusi, CLI akan mengeluarkan peringatan (kesalahan dalam 7.0.200) karena semantik jalur output yang tidak jelas. Opsi--output
tidak 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--output
tingkat 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
PublishDir
msbuild alih-alih opsi--output
. Misalnya,dotnet publish -p:PublishDir=.\publish
mengirim output penerbitan untuk setiap proyek ke folderpublish
di bawah folder yang berisi file proyek..NET Core 2.x SDK
Jika Anda menentukan jalur relatif saat menerbitkan proyek, direktori output yang dihasilkan relatif terhadap lokasi file proyek, bukan ke direktori kerja saat ini.
Jika Anda menentukan jalur relatif saat menerbitkan solusi, setiap output proyek masuk ke folder terpisah relatif terhadap lokasi file proyek. Jika Anda menentukan jalur absolut saat menerbitkan solusi, semua output penerbitan untuk semua proyek masuk ke folder yang ditentukan.
--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 linux
mengatur RID kelinux-x64
. Jika Anda menggunakan opsi ini, jangan gunakan opsi-r|--runtime
. Tersedia sejak .NET 6.
--sc|--self-contained [true|false]
Menerbitkan runtime .NET dengan aplikasi Anda sehingga runtime tidak perlu diinstal pada komputer target. Defaultnya adalah
true
jika pengidentifikasi runtime ditentukan dan proyek adalah proyek yang dapat dieksekusi (bukan proyek pustaka). Untuk informasi selengkapnya, lihat penerbitan aplikasi .NET dan Menerbitkan aplikasi .NET dengan .NET CLI.Jika opsi ini digunakan tanpa menentukan
true
ataufalse
, defaultnya adalahtrue
. Dalam hal ini, jangan letakkan solusi atau argumen proyek segera setelah--self-contained
, karenatrue
ataufalse
diharapkan dalam posisi tersebut.--no-self-contained
Setara dengan
--self-contained false
.--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 penerbitan aplikasi .NET dan Menerbitkan aplikasi .NET dengan .NET CLI. Jika Anda menggunakan opsi ini, gunakan
--self-contained
atau--no-self-contained
juga.
--tl:[auto|on|off]
Menentukan apakah pencatat terminal
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.on
melewati pemeriksaan lingkungan dan mengaktifkan pengelogan terminal.off
melewati pemeriksaan lingkungan dan menggunakan pencatat konsol default.Pencatat terminal 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.
--use-current-runtime, --ucr [true|false]
Mengatur
RuntimeIdentifier
keRuntimeIdentifier
portabel platform berdasarkan salah satu komputer Anda. Ini terjadi secara implisit dengan properti yang memerlukanRuntimeIdentifier
, sepertiSelfContained
,PublishAot
,PublishSelfContained
,PublishSingleFile
, danPublishReadyToRun
. Jika properti diatur ke false, resolusi implisit tersebut tidak akan lagi terjadi.
-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.
Contoh
Buat biner lintas platform yang bergantung pada kerangka kerja
untuk proyek di direktori saat ini: dotnet publish
Dimulai 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-x64
RID 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 false
RID 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-x64
Terbitkan file proyek yang ditentukan:
dotnet publish ~/projects/app1/app1.csproj
Terbitkan aplikasi saat ini tetapi jangan pulihkan referensi project-to-project (P2P), hanya proyek akar selama operasi pemulihan:
dotnet publish --no-dependencies
Lihat juga
- gambaran umum penerbitan aplikasi .NET
- Menerbitkan aplikasi .NET dengan .NET CLI
- 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