'dotnet pack' menggunakan mode Rilis

Perintahdotnet pack, yang mengemas kode ke dalam paket NuGet, sekarang menggunakan konfigurasi Release daripada konfigurasi Debug sebagai default.

Perilaku sebelumnya

Sebelumnya, dotnet pack gunakan Debug konfigurasi kecuali konfigurasi ditentukan secara eksplisit atau PackRelease diatur ke true.

PropertiPackRelease ditambahkan dalam .NET 7 sebagai langkah untuk menghadapi perubahan besar ini. Sebelumnya, Anda dapat mengatur DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS variabel lingkungan untuk digunakan PackRelease dalam proyek yang merupakan bagian dari solusi Visual Studio.

Perilaku baru

Jika Anda mengembangkan dengan .NET 8 SDK atau versi yang lebih baru, dotnet pack gunakan Release konfigurasi secara default untuk semua proyek. Jika Anda memiliki skrip CI/CD, pengujian, atau kode di mana Anda telah menghardcode ke dalam jalur output Debug, perubahan ini dapat merusak alur kerja Anda. Selain itu, Anda tidak akan dapat men-debug aplikasi yang dikemas kecuali Debug konfigurasi ditentukan secara eksplisit (misalnya, menggunakan dotnet pack --configuration Debug.

dotnet pack dapat mengemas beberapa moniker kerangka kerja target (TFM) secara bersamaan. Jika proyek Anda menargetkan beberapa versi dengan nilai PackRelease yang berbeda untuk setiap target, Anda dapat mengalami konflik di mana beberapa TFM mengemas konfigurasi Release dan yang lainnya mengemas konfigurasi Debug.

Untuk proyek dalam solusi perangkat lunak:

  • dotnet pack dapat mengemas semua proyek dalam solusi Visual Studio jika diberikan file solusi. Untuk setiap proyek dalam solusi, nilai PackRelease diatur secara implisit ke true jika tidak terdefinisi. Agar dotnet pack dapat menentukan konfigurasi yang tepat untuk digunakan, semua proyek dalam solusi harus menyetujui nilai dari PackRelease.

  • Perubahan ini dapat menyebabkan performa dotnet pack 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_PACK_RELEASE_FOR_SOLUTIONS lingkungan tidak lagi dikenali.

Versi yang diperkenalkan

Pratinjau .NET 8 1

Jenis perubahan yang memutus kompatibilitas

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

Alasan perubahan

Dalam kebanyakan kasus ketika Anda membuat paket, Anda ingin kode Anda dioptimalkan dan dapat membuat paket lebih kecil dengan mengecualikan informasi debugging.

Variabel DOTNET_CLI_ENABLE_PACK_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 baik dotnet publish maupun dotnet pack.

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

  • 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 mengemas solusi dan itu rusak karena satu atau beberapa proyek secara eksplisit menetapkan nilai untuk PackRelease, Anda harus secara eksplisit diatur PackRelease ke false di setiap proyek:

    <PropertyGroup>
      <PackRelease>false</PackRelease>
    </PropertyGroup>
    
  • Jika Anda mengemas solusi dan kinerjanya menurun, Anda dapat mengatur variabel lingkungan DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS ke true (atau nilai lainnya) untuk mengatasi penurunan tersebut. Jika Anda menggunakan variabel ini dan proyek apa pun mendefinisikan PackRelease, semua proyek harus menentukannya, atau Anda dapat menggunakan file Directory.Build.Props . Variabel ini mempengaruhi baik dotnet publish maupun dotnet pack.

Lihat juga