'dotnet publish' menggunakan konfigurasi Rilis

Perintah dotnet publish sekarang menggunakan Release konfigurasi alih-alih Debug konfigurasi secara default jika kerangka kerja target adalah .NET 8 atau versi yang lebih baru.

Perilaku sebelumnya

Sebelumnya, dotnet publish gunakan Debug konfigurasi kecuali konfigurasi ditentukan secara eksplisit atau PublishRelease diatur ke true.

Properti PublishRelease ditambahkan dalam .NET 7 sebagai jalur yang diteruskan ke perubahan yang melanggar ini. Sebelumnya, Anda dapat mengatur DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS variabel lingkungan untuk digunakan PublishRelease dalam proyek yang merupakan bagian dari solusi Visual Studio.

Perilaku yang baru

Jika Anda mengembangkan dengan .NET 8 SDK atau versi yang lebih baru, dotnet publish menggunakan Release konfigurasi secara default untuk proyek yang TargetFramework diatur ke net8.0 atau versi yang lebih baru. Jika Anda memiliki skrip CI/CD, pengujian, atau kode tempat Anda telah melakukan hardcod ke Debug jalur output, perubahan ini dapat merusak alur kerja Anda.

Jika proyek Anda menargetkan beberapa versi, perilaku baru hanya berlaku jika Anda menentukan kerangka kerja target .NET 8 atau yang lebih baru saat Anda menerbitkan (misalnya, menggunakan dotnet publish -f net8.0).

Untuk proyek dalam solusi:

  • dotnet publish dapat menerbitkan semua proyek dalam solusi Visual Studio jika diberikan file solusi. Untuk proyek solusi yang menargetkan .NET 8 atau yang lebih baru, nilai PublishRelease diatur secara implisit ke true jika tidak ditentukan. Namun, untuk dotnet publish menentukan konfigurasi yang benar untuk digunakan untuk solusi, semua proyek dalam solusi harus menyetujui nilainya .PublishRelease Jika proyek lama dalam solusi telah PublishRelease diatur ke false, Anda harus secara eksplisit mengatur properti ke false untuk proyek .NET 8+ baru juga.

  • Perubahan ini dapat menyebabkan performa dotnet publish ke regresi, terutama untuk solusi yang berisi banyak proyek. Untuk mengatasi hal ini, variabel DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS lingkungan baru telah diperkenalkan.

  • Variabel DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS lingkungan tidak lagi dikenali.

Versi yang diperkenalkan

Pratinjau .NET 8 1

Jenis perubahan yang melanggar

Perubahan ini dapat memengaruhi kompatibilitas sumber dan juga merupakan perubahan perilaku.

Alasan untuk berubah

Dalam kebanyakan kasus saat menerbitkan, Anda ingin kode Anda dioptimalkan dan dapat menjaga aplikasi lebih kecil dengan mengecualikan informasi penelusuran kesalahan. Pelanggan telah meminta untuk Release menjadi konfigurasi default untuk publish waktu yang lama. Selain itu, Visual Studio telah memiliki perilaku ini selama bertahun-tahun.

Variabel DOTNET_CLI_ENABLE_PUBLISH_RELEASE_FOR_SOLUTIONS lingkungan dihapus karena perilaku yang diaktifkannya sekarang adalah perilaku default dan kontrol terperinci tidak lagi diperlukan.

  • Untuk menonaktifkan perilaku baru sepenuhnya, Anda dapat mengatur DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE variabel lingkungan ke true (atau nilai lainnya). Variabel ini mempengaruhi dan dotnet publishdotnet pack.

  • Untuk secara eksplisit menentukan Debug konfigurasi untuk penerbitan, gunakan -c opsi atau --configuration dengan dotnet publish.

  • Jika alur CI/CD Anda rusak karena jalur output yang dikodekan secara permanen, perbarui jalur ke Release alih-alih Debug, nonaktifkan perilaku baru menggunakan DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE variabel lingkungan, atau tentukan bahwa Debug konfigurasi harus digunakan.

  • Jika Anda menerbitkan solusi dan rusak, Anda dapat secara eksplisit mengatur PublishRelease ke true (atau false untuk kembali ke perilaku sebelumnya).

    <PropertyGroup>
      <PublishRelease>true</PublishRelease>
    </PropertyGroup>
    

    Atau, Anda dapat menentukan properti dalam file Directory.Build.Props . Namun, jika Anda mengaturnya false dalam file ini, Anda masih harus secara eksplisit mengatur properti ke false dalam proyek .NET 8+ dalam solusi. Demikian pula, jika beberapa proyek secara eksplisit menetapkan nilai yang berbeda dari nilai dalam file Directory.Build.Props , penerbitan akan gagal.

  • Jika Anda menerbitkan solusi dan performa telah regresi, Anda dapat mengatur DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS variabel lingkungan ke true (atau nilai lainnya) untuk menghapus regresi. Namun, jika Anda mengatur variabel ini dan solusi Anda berisi proyek .NET 8+ dan proyek yang menargetkan .NET 7 atau yang lebih lama, penerbitan akan gagal sampai semua proyek menentukan PublishRelease. Variabel ini mempengaruhi dan dotnet publishdotnet pack.

Lihat juga