Bagikan melalui


Penamaan yang kuat

Penamaan yang kuat mengacu pada penandatanganan rakitan dengan kunci, menghasilkan rakitan bernama kuat. Ketika rakitan diberi nama kuat, itu menciptakan identitas unik berdasarkan nama dan nomor versi rakitan, dan dapat membantu mencegah konflik rakitan.

Kelemahan dari penamaan yang kuat adalah bahwa .NET Framework pada Windows memungkinkan pemuatan rakitan yang ketat setelah perakitan diberi nama kuat. Referensi rakitan bernama kuat harus sama persis dengan versi rakitan yang dimuat, memaksa pengembang untuk mengonfigurasi pengalihan pengikatan saat menggunakan rakitan:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Ketika pengembang .NET mengeluh tentang penamaan yang kuat, yang biasanya mereka keluhkan adalah pemuatan rakitan yang ketat. Untungnya, masalah ini diisolasi untuk .NET Framework. .NET 5+, .NET Core, Xamarin, UWP, dan sebagian besar implementasi .NET lainnya tidak memiliki pemuatan rakitan yang ketat, yang merupakan kelemahan utama dari penamaan yang kuat.

Salah satu aspek penting penamaan yang kuat pada .NET Framework adalah viral: rakitan bernama kuat hanya dapat mereferensikan rakitan bernama kuat lainnya. Jika pustaka Anda tidak bernama kuat, aplikasi dan pustaka .NET Framework yang memerlukan penamaan yang kuat tidak dapat menggunakannya.

Manfaat penamaan yang kuat pada .NET Framework adalah:

  1. Rakitan dapat dirujuk dan digunakan oleh rakitan bernama kuat lainnya.
  2. Rakitan dapat disimpan di Global Assembly Cache (GAC).
  3. Rakitan dapat dimuat berdampingan dengan versi rakitan lainnya. Pemuatan rakitan berdampingan umumnya diperlukan oleh aplikasi dengan arsitektur plug-in.

Penamaan yang kuat tidak memiliki manfaat pada .NET Core/5+. Kompilator C# menghasilkan peringatan CS8002 untuk rakitan bernama kuat yang mereferensikan rakitan bernama yang tidak kuat. Tidak masalah untuk menekan peringatan ini untuk pustaka yang menargetkan .NET Core/5+ saja.

Buat pustaka .NET bernama kuat

Anda harus memberi nama yang kuat pada pustaka .NET sumber terbuka Anda jika targetnya menyertakan .NET Framework atau .NET Standard. Penamaan yang kuat tidak diperlukan untuk pustaka yang menargetkan .NET Core/5+ saja.

Catatan

Panduan ini khusus untuk pustaka .NET yang didistribusikan secara publik, seperti pustaka .NET yang diterbitkan di NuGet.org. Penamaan yang kuat tidak diperlukan oleh sebagian besar aplikasi .NET dan tidak boleh dilakukan secara default.

✔️ PERTIMBANGKAN penamaan yang kuat rakitan perpustakaan Anda.

✔️ PERTIMBANGKAN untuk menambahkan kunci penamaan yang kuat ke sistem kontrol sumber Anda.

Kunci yang tersedia untuk umum memungkinkan pengembang memodifikasi dan mengompilasi ulang kode sumber pustaka Anda dengan kunci yang sama.

Anda tidak boleh membuat kunci penamaan publik yang kuat jika telah digunakan di masa lalu untuk memberikan izin khusus dalam skenario kepercayaan parsial. Jika tidak, Anda dapat membahayakan lingkungan yang ada.

Penting

Ketika identitas penerbit kode diinginkan, Authenticode dan Penandatanganan Paket NuGet disarankan. Code Access Security (CAS) tidak boleh digunakan sebagai mitigasi keamanan.

✔️ PERTIMBANGKAN untuk meningkatkan bertahap versi rakitan hanya pada perubahan versi utama untuk membantu pengguna mengurangi pengalihan pengikatan, dan seberapa sering mereka diperbarui.

Baca selengkapnya tentang penerapan versi dan versi rakitan.

❌ JANGAN menambah, menghapus, atau mengubah kunci penamaan yang kuat.

Memodifikasi kunci penamaan rakitan yang kuat mengubah identitas rakitan dan memecahkan kode yang dikompilasi yang menggunakannya. Untuk informasi selengkapnya, lihat perubahan pemecahan biner.

❌ JANGAN menerbitkan versi pustaka Anda yang bernama kuat dan tidak diberi nama yang kuat. Misalnya, Contoso.Api dan Contoso.Api.StrongNamed.

Menerbitkan dua paket mem-fork ekosistem pengembang Anda. Juga, jika aplikasi pada akhirnya tergantung pada kedua paket, pengembang dapat menghadapi konflik nama jenis. Dalam pertimbangan menyangkut.NET, mereka adalah jenis yang berbeda dalam rakitan yang berbeda.