Untuk menghindari kesalahan ini, Anda dapat:
- Muat unit secara dinamis, atau
- Tanda tangani majelis pihak ketiga.
Anda akan menemukan petunjuk tentang cara menandatangani majelis pihak ketiga di .NET-fu: Menandatangani Majelis yang Tidak Ditandatangani (Tanpa Penandatanganan Penundaan) .
Menandatangani Majelis Pihak Ketiga
Prinsip dasar untuk menandatangani pihak ketiga adalah untuk
Bongkar perakitan menggunakan ildasm.exe
dan menyimpan bahasa perantara (IL):
ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll
Bangun kembali dan tandatangani majelis:
ilasm /dll /key=myKey.snk thirdPartyLib.il
Memperbaiki Referensi Tambahan
Langkah-langkah di atas berfungsi dengan baik kecuali jika perakitan pihak ketiga Anda ( A.dll ) referensi perpustakaan lain ( B.dll ) yang juga harus ditandatangani. Anda dapat membongkar, membangun kembali dan menandatangani kedua A.dll dan B.dll menggunakan perintah di atas, tetapi pada saat runtime, pemuatan B.dll akan gagal karena A.dll awalnya dibangun dengan mengacu pada unsigned versi B.dll .
Perbaikan untuk masalah ini adalah untuk menambal file IL yang dihasilkan pada langkah 1 di atas. Anda perlu menambahkan token kunci publik B.dll ke referensi. Anda mendapatkan token ini dengan menelepon
sn -Tp B.dll
yang akan memberi Anda output berikut:
Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.33440
Copyright (c) Microsoft Corporation. All rights reserved.
Public key (hash algorithm: sha1):
002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3
b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb
4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758
cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c
78effe92
Public key token is a8a7ed7203d87bc9
Baris terakhir berisi token kunci publik. Anda kemudian harus mencari IL dari A.dll untuk referensi ke B.dll dan menambahkan token sebagai berikut:
.assembly extern /*23000003*/ MyAssemblyName
{
.publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )
.ver 10:0:0:0
}