dotnet publish

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 dotnet publish perintah 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 harus menjalankan dotnet restore karena dijalankan secara implisit oleh semua perintah yang memerlukan terjadinya pemulihan, 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 pembangunan integrasi berkelanjutan di Azure DevOps Services atau dalam sistem pembangunan yang perlu secara eksplisit mengontrol saat pemulihan terjadi.

Untuk informasi tentang cara mengelola umpan NuGet, lihat dotnet restore dokumentasi.

MSBuild

Perintah dotnet publish memanggil MSBuild, yang memanggil Publish target. IsPublishable Jika properti diatur ke false untuk proyek tertentu, Publish target tidak dapat dipanggil, dan dotnet publish perintah hanya menjalankan pemulihan dotnet implisit pada proyek.

Parameter apa pun yang diteruskan ke dotnet publish diteruskan ke MSBuild. Parameter -c dan -o masing-masing memetakan ke properti dan PublishDir MSBuildConfiguration.

Perintah dotnet publish menerima opsi MSBuild, seperti -p untuk mengatur properti dan -l 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 . Contohnya:

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 PublishProfile properti, jalur tersebut akan diabaikan. MSBuild secara default terlihat di folder Properties/PublishProfiles dan mengasumsikan ekstensi file pubxml . Untuk menentukan jalur dan nama file termasuk ekstensi, atur PublishProfileFullPath properti alih-alih PublishProfile properti .

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 hanya dihormati oleh Visual Studio dan tidak berpengaruh pada dotnet publish. Kami berupaya menyelaraskan CLI lebih lanjut dengan perilaku Visual Studio. Tetapi beberapa properti tidak akan pernah digunakan oleh CLI. CLI dan Visual Studio keduanya melakukan aspek pengemasan penerbitan, dan paket dotnet/sdk#29817 untuk menambahkan dukungan untuk lebih banyak properti yang terkait dengan itu. Tetapi CLI tidak melakukan aspek otomatisasi penyebaran penerbitan, dan properti yang terkait dengan yang tidak didukung. Properti .pubxml yang paling terkenal yang tidak didukung oleh dotnet publish adalah properti berikut yang berdampak pada 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:

Pengunduhan manifes beban kerja

Saat Anda menjalankan perintah ini, pengunduhan latar belakang asinkron manifes iklan untuk beban kerja akan dimulai. Jika unduhan masih berjalan saat perintah ini selesai, unduhan akan dihentikan. Untuk informasi selengkapnya, lihat Manifes iklan.

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.

Opsi

  • -a|--arch <ARCHITECTURE>

    Menentukan arsitektur target. Hal ini adalah sintaks singkat untuk mengatur Pengidentifikasi Runtime (RID), di mana nilai yang disediakan digabung dengan RID default. Misalnya, pada komputer win-x64, menentukan --arch x86 akan mengatur RID ke win-x86. Jika Anda menggunakan opsi ini, jangan gunakan opsi -r|--runtime. Tersedia sejak .NET 6 Preview 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 Release konfigurasi secara default untuk proyek yang TargetFramework-nya diatur ke net8.0 atau versi yang lebih baru. Konfigurasi build default adalah Debug 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 bahkan jika 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 SDK .NET Core 3.0.

  • --manifest <PATH_TO_MANIFEST_FILE>

    Menentukan satu atau beberapa manifes target yang akan digunakan untuk memangkas kumpulan paket yang diterbitkan dengan aplikasi. File manifes adalah bagian dari output dotnet store perintah. Untuk menentukan beberapa manifes, tambahkan --manifest opsi untuk setiap manifes.

  • --no-build

    Tidak membangun proyek sebelum menerbitkan. Ini juga secara implisit --no-restore mengatur bendera.

  • --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 yang dapat dieksekusi dan lintas platform yang bergantung pada kerangka kerja. Ini default ke [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ untuk executable mandiri.

    Dalam proyek web, jika folder output berada di folder proyek, perintah berturut-turut dotnet publish menghasilkan folder output berlapis. Misalnya, jika folder proyek adalah myproject, dan folder output penerbitan adalah myproject/publish, dan Anda menjalankan dotnet 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 berada di bawah folder proyek, atau kecualikan folder terbitkan dari proyek. Untuk mengecualikan folder publikasi bernama publishoutput, tambahkan elemen berikut ke PropertyGroup elemen dalam file .csproj :

    <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
    
    • .NET 7.0.200 SDK dan yang lebih baru

      Jika Anda menentukan --output opsi saat menjalankan perintah ini pada solusi, CLI akan mengeluarkan peringatan (kesalahan dalam 7.0.200) karena semantik jalur output yang tidak jelas. Opsi --output ini 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 tingkat solusi --output 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 msbuild PublishDir alih-alih --output opsi . Misalnya, dotnet publish -p:PublishDir=.\publish mengirim output penerbitan untuk setiap proyek ke publish folder 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 (OS) target. Hal ini adalah sintaks singkat untuk mengatur Pengidentifikasi Runtime (RID), di mana nilai yang disediakan digabung dengan RID default. Misalnya, pada komputer win-x64, menentukan --os linux akan mengatur RID ke linux-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 aplikasi .NET menerbitkan dan Menerbitkan aplikasi .NET dengan .NET CLI.

    Jika opsi ini digunakan tanpa menentukan true atau false, defaultnya adalah true. Dalam hal ini, jangan letakkan solusi atau argumen proyek segera setelah --self-contained, karena true atau false diharapkan dalam posisi tersebut.

  • --no-self-contained

    Setara dengan --self-contained false.

  • --source <SOURCE>

    URI sumber paket NuGet yang akan 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 aplikasi .NET menerbitkan 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 pertama 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]

    RuntimeIdentifier Mengatur ke platform portabel RuntimeIdentifier berdasarkan salah satu komputer Anda. Ini terjadi secara implisit dengan properti yang memerlukan RuntimeIdentifier, seperti SelfContained, , PublishAotPublishSelfContained, PublishSingleFile, dan PublishReadyToRun. 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], dan diag[nostic]. Default adalah minimal. 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 executable yang bergantung pada kerangka kerja untuk platform saat ini.

  • Buat executable mandiri untuk proyek di direktori saat ini, untuk runtime tertentu:

    dotnet publish --runtime osx-x64
    

    RID harus berada dalam file proyek.

  • Buat executable yang bergantung pada 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