इस त्रुटि से बचने के लिए आप या तो:
- विधानसभा को गतिशील रूप से लोड करें, या
- तीसरे पक्ष के विधानसभा पर हस्ताक्षर करें।
आपको .NET-fu में थर्ड-पार्टी असेंबलियों पर हस्ताक्षर करने के निर्देश मिलेंगे : एक असेंबली असेंबली (बिना विलंब हस्ताक्षर) पर हस्ताक्षर किए ।
तृतीय-पक्ष विधानसभाओं पर हस्ताक्षर
तेरह-पक्ष पर हस्ताक्षर करने का मूल सिद्धांत है
ildasm.exe
इंटरमीडिएट भाषा (IL) का उपयोग करके असेंबली को अलग करें :
ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll
विधानसभा का पुनर्निर्माण और हस्ताक्षर करें:
ilasm /dll /key=myKey.snk thirdPartyLib.il
अतिरिक्त संदर्भ तय करना
जब तक आपकी तृतीय-पक्ष असेंबली ( A.dll ) किसी अन्य लायब्रेरी ( B.dll ) का संदर्भ नहीं देती है, तब तक उपरोक्त चरण ठीक काम करते हैं, जिस पर हस्ताक्षर भी करने होते हैं। उपरोक्त आदेशों का उपयोग करके आप A.dll और B.dll दोनों को अलग कर सकते हैं, पुनर्निर्माण कर सकते हैं और साइन इन कर सकते हैं , लेकिन रनवे पर, B.dll की लोडिंग विफल हो जाएगी क्योंकि A.dll मूल रूप से B.dll के अहस्ताक्षरित संस्करण के संदर्भ में बनाया गया था ।
इस समस्या का समाधान चरण 1 में उत्पन्न IL फ़ाइल को ऊपर करना है। आपको संदर्भ में B.dll के सार्वजनिक कुंजी टोकन को जोड़ना होगा। आपको कॉल करके यह टोकन मिलता है
sn -Tp B.dll
जो आपको निम्न आउटपुट देगा:
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
अंतिम पंक्ति में सार्वजनिक कुंजी टोकन है। फिर आपको B.dll के संदर्भ के लिए A.dll का IL खोजना होगा और टोकन को इस प्रकार जोड़ना होगा:
.assembly extern /*23000003*/ MyAssemblyName
{
.publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )
.ver 10:0:0:0
}