2009-11-03 15 views
10

एनएचबीरनेट 2.1 के हालिया अपग्रेड ने सतह पर मेगा सिरदर्द की स्थिति लाई है।एक हस्ताक्षरित असेंबली पर हस्ताक्षर करना

ऐसा लगता है कि ज्यादातर परियोजनाएं हस्ताक्षरित असेंबली के रूप में डिफ़ॉल्ट रूप से निर्मित होती हैं। उदाहरण के लिए fluentnhibernate keyfile fluent.snk संदर्भित करता है।

Nhibernate.search मैं क्या इकट्ठा कर सकते हैं से अहस्ताक्षरित बनाता है और निर्माण नहीं होगा पर हस्ताक्षर किए है कि है यदि आप एक उत्पन्न keyfile संदर्भ है, तो आप त्रुटि मिलती है:

संदर्भित विधानसभा 'Lucene.Net' एक मजबूत नहीं है नाम

यह castle.activerecord है nhibernate.search के रूप में एक निर्भरता के रूप में आप खराब त्रुटि संदर्भित विधानसभा nhibernate.search एक मजबूत नाम नहीं है मिल का निर्माण नहीं होगा जैसी परियोजनाओं का अर्थ है:

छोड़ो ई कुछ परियोजनाएं caslte.activerecord का उपयोग करती हैं, इसलिए यह काफी महत्वपूर्ण है कि यह बनाता है।

क्या किसी को भी कोई विचार है कि यहां क्या करना है क्योंकि मैं पूरी तरह से विचारों से बाहर हूं?

यह पूर्ण पागलपन है।

उत्तर

16
  1. प्रदान की विधानसभा एक VS.NET कमांड प्रॉम्प्ट से के लिए MSIL प्राप्त, दर्ज करें: ग:> ILDASM providedAssembly.dll /out:providedAssembly.il
  2. नाम बदलें/मूल विधानसभा के लिए कदम मैं सिर्फ फाइलनाम में ".orig" पर काम करता हूं।
  3. MSIL उत्पादन से एक नया विधानसभा और अपने विधानसभा keyfile बनाएं मान लिया जाये कि आप पहले से ही एक विधानसभा कुंजी युग्म फ़ाइल है, एक VS.NET कमांड प्रॉम्प्ट से निम्न कार्य करें: ग:> ilasm providedAssembly.il/dll/कुंजी = keypair001.snk

स्रोत http://www.andrewconnell.com/blog/archive/2004/12/15/772.aspx

2

बात यह है कि आप मजबूत नामित असेंबली से गैर-मजबूत नामित असेंबली का संदर्भ नहीं दे सकते हैं, लेकिन आप रिवर्स कर सकते हैं। यही कारण है कि वहां हर सभ्य परियोजना पर हस्ताक्षर किए जाने चाहिए।

जब मैं उस समस्या में भाग लेता हूं, तो मैं उपरोक्त मेरी टिप्पणी में स्पष्टीकरण के साथ प्रोजेक्ट लेखक (या कोई समस्या पंजीकृत करता हूं) पर एक पंक्ति छोड़ देता हूं, और जब मैं एक फिक्स की प्रतीक्षा करता हूं, तो मैं संकलित करता हूं और इसे स्वयं साइन करता हूं।

+0

+1। हाँ, विकल्प या तो स्वयं को नियंत्रित करते हैं और साइन इन करते हैं, या आपके सभी सामानों को हस्ताक्षर नहीं करते हैं (जो आमतौर पर एक अच्छी पसंद नहीं है)। – RichardOD

1

सभी दिया जवाब के साथ पुनर्निर्माण, ilasm का उपयोग कर पुनः/इस बार उनमें एक गंभीर दोष - यदि वे एक से अधिक हस्ताक्षरित असेंबली हैं जो एक दूसरे पर निर्भर करते हैं तो वे काम नहीं करते हैं। हस्ताक्षरित लोगों के हस्ताक्षरित संदर्भों को बदलने के लिए आपको मैन्युअल रूप से आईएल फ़ाइलों को संपादित करना होगा। यह निश्चित रूप से संभव है, लेकिन त्रुटि प्रवण।

एक बेहतर तरीका है। सबसे पहले, यहाँ मेरी स्रोत हैं:

  1. https://www.nuget.org/packages/Nivot.StrongNaming/1.0.4.2
  2. How to download a Nuget package without nuget.exe or Visual Studio extension?

पहले एक एक NuGet पैकेज जो दृढ़ता विधानसभाओं नाम के लिए अनुमति देता है StrongNaming कहा जाता है के लिए एक लिंक है और यह भी अहस्ताक्षरित संदर्भ का ख्याल रखता है तुम्हारे लिए! दूसरा यह बताता है कि यदि आवश्यक हो तो विजुअल स्टूडियो के बिना NuGet संकुल को कैसे डाउनलोड करें।

मैं व्यक्तिगत रूप से, दृश्य स्टूडियो NuGet पैकेज प्रबंधक खुद का उपयोग कर इसे डाउनलोड करने के लिए इस्तेमाल किया तथापि, तुम हमेशा https://www.nuget.org/api/v2/package/Nivot.StrongNaming/1.0.4.2 के लिए सीधे ब्राउज़ करें और nivot.strongnaming.1.0.4.2.zip

नहीं है डाउनलोड कर सकते हैं डाउनलोड किए गए ज़िप में tools फ़ोल्डर (या NuGet का उपयोग किया गया था तो पैकेज)। एक बार जब आप इसे स्थापित कर लेंगे तो आप इसे PowerShell मॉड्यूल के रूप में आसानी से इंस्टॉल कर सकते हैं।

संबंधित मुद्दे