Bagikan melalui


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 diatur ke untuk proyek tertentu, target tidak dapat dipanggil, dan 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 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 /PublishProfiles dan mengasumsikan ekstensi file pubxml . Untuk menentukan jalur dan nama file termasuk ekstensi, atur 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 hanya dihormati oleh Visual Studio dan tidak berpengaruh pada . 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 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:

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 ke win-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 ke net8.0 atau versi yang lebih baru. Konfigurasi build default 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 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 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 di bawah folder proyek, atau kecualikan folder terbitkan dari proyek. Untuk mengecualikan folder terbitkan bernama publishoutput, tambahkan elemen berikut ke elemen dalam 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 folder publish 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 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 penerbitan aplikasi .NET 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 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 ke RuntimeIdentifier portabel platform berdasarkan salah satu komputer Anda. Ini terjadi secara implisit dengan properti yang memerlukan RuntimeIdentifier, seperti SelfContained, PublishAot, PublishSelfContained, 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]. Defaultnya 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 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