2012-02-22 16 views
12

यह एक क्लासिक समस्या है, जिसमें numerous समाधान described हैं। हालांकि, उनमें से कोई भी मेरे लिए काम नहीं कर रहा है।असेंबली पीढ़ी असफल - संदर्भित असेंबली का मजबूत नाम नहीं है। अन्य समाधान क्यों काम नहीं करते हैं?

मैं SharePoint समाधान में Report.NET लाइब्रेरी का उपयोग कर रहा हूं। संदर्भ संदेश के रूप में Reports.dll को जोड़ना और त्रुटि संदेश में संकलन परिणाम "असेंबली पीढ़ी विफल - संदर्भित असेंबली 'रिपोर्ट्स' का कोई मजबूत नाम नहीं है।" हालांकि, मेरी परियोजना में प्रोजेक्ट गुणों में एक key.snk जुड़ा हुआ है। इसलिए मैं, एकत्रित न करें और इस कुंजी फ़ाइल के साथ dll पुनः, के रूप में कहीं और वर्णित करने का प्रयास करें:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ildasm Reports.dll /out:Reports.il 

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ilasm Reports.il /dll /resource=Reports.res /key=..\key.snk 

<output removed for brevity> 

Class 95 
Class 96 
Method Implementations (total): 1 
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved 
Writing PE file 
Signing file with strong name 
Operation completed successfully 

मैं एक नया Reports.dll साथ खत्म करने के लिए अब टाइमस्टैंप। इसे मेरे प्रोजेक्ट और बिल्डिंग के संदर्भ के रूप में जोड़ना, हालांकि, पहले जैसा ही त्रुटि संदेश देता है। "रिपोर्ट्स" संदर्भ के गुण "मजबूत नाम: गलत" प्रदर्शित करता है।

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>sn -R Reports.dll ..\key.snk 

Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

Assembly 'Reports.dll' successfully re-signed 

यह ध्यान देने योग्य है कि एसएन उपयोगिता चलाने त्रुटि संदेश के साथ विफल रहता है हो सकता है:

मुसीबत का एक सा द्वारा हतोत्साहित होता है, क्योंकि मैं मजबूत नामकरण सुविधा का उपयोग विधानसभा में फिर से प्रवेश करने का प्रयास "Reports.dll एक दृढ़ता से नामित असेंबली का प्रतिनिधित्व नहीं करता है" से पहले इसे डिस्सेम्बल/साइन/रीसेम्बल प्रक्रिया से चलाते समय।

हालांकि, जब इसे अलग-अलग/हस्ताक्षर/पुन: वर्गीकरण के बाद चलाया जाता है, तो मुझे विजुअल स्टूडियो में फिर से जोड़ने पर मूल त्रुटि संदेश मिलता है।

+0

के संभावित डुप्लिकेट [विधानसभा बनाना विफल रहा - संदर्भित विधानसभा 'Interop.Office' एक मजबूत नाम नहीं है] (http: // stackoverflow .com/प्रश्न/6845537/असेंबली-पीढ़ी-असफल-संदर्भित-असेंबली-इंटरऑप-ऑफिस-नहीं है) – JabberwockyDecompiler

उत्तर

20

मैं सिर्फ इस का उपयोग कर बनाम 2010 में इस समस्या का समाधान:

Project Properties -> Signing -> uncheck Sign the assembly checkbox 
+6

पर चलता है, मुझे बस स्टैक ओवरफ़्लो पसंद है। मेरी समस्याओं का 99% हमेशा स्टैक ओवरफ्लो की मदद से हल किया जाता है। तुम सब चट्टान !! – Karishma

3

मैं सुझाव दूंगा कि यदि आप कमांड लाइन से सही ढंग से Reports.dll पर हस्ताक्षर किए हैं, तो वीएस अभी भी कहता है कि वह डीएलएल हस्ताक्षरित है; तो यह गलत फ़ाइल का संदर्भ होना चाहिए।

तुम सच में पागल और होना चाहते हैं की अच्छी तरह जांच पर हस्ताक्षर के बाद मजबूत नामकरण, ILDASM में Reports.dll लोड (आप पेड़ में प्रकट नोड डबल क्लिक करें और .publickey अनुभाग देखने के लिए नीचे स्क्रॉल करना) । या आसानी से इसे ILSpy में खोलें।

report.dll पर हस्ताक्षर करने के बाद; अपनी रेफरेंसिंग प्रोजेक्ट की प्रोज फ़ाइल को एक्सएमएल दस्तावेज़ के रूप में खोलें (यदि आपके पास वीएस पावर कमांड हैं, तो आप राइट-क्लिक कर सकते हैं और 'प्रोजेक्ट फाइल संपादित करें'; अन्यथा आप प्रोजेक्ट को अनलोड कर सकते हैं और फिर इसे 'ओपन विथ' कमांड का उपयोग करके वीएस में खोल सकते हैं। फ़ाइल खोलें संवाद) और सत्यापित करें कि डीएलएल का संदर्भ वास्तव में सही पथ है। यदि ऐसा नहीं है, तो इसे सही करें और प्रोजेक्ट को पुनः लोड करें।

+0

हाय, आपके इनपुट के लिए धन्यवाद। उपरोक्त हस्ताक्षर आदेश चलाने के बाद, ILSpy (वैसे टूल, वैसे भी) रिपोर्ट [असेंबली: असेंबलीकेफाइल ("")] और [असेंबली: असेंबलीकेनेनाम ("")] Reports.dll के लिए। मुझे लगता है कि इसका मतलब यह है कि फ़ाइल वास्तव में हस्ताक्षरित नहीं है? फ़ाइल की टाइमस्टैम्प अभी भी हस्ताक्षरित हस्ताक्षर से मेल खाती है, हालांकि। –

+0

ब्याज से - जब आप ILSpy में असेंबली के रूट नोड का चयन करते हैं, तो दाईं ओर फलक को फ़ाइल नाम के पहले दो टिप्पणियों और फिर दूसरी पंक्ति पर पूर्ण असेंबली नाम दिखाना चाहिए। उस दूसरी पंक्ति पर, असेंबली का नाम ', PublicKeyToken = [some_hex_string]' के साथ समाप्त होता है? –

+1

यह भी 'Report.Net' लाइब्रेरी है: http: // sourceforge।नेट/प्रोजेक्ट/रिपोर्ट/यदि ऐसा है तो क्या आप प्रोजेक्ट नहीं खोल सकते हैं और बिल्ड प्रक्रिया के हिस्से के रूप में अपने कीफाइल के साथ वीएस में पुनर्निर्माण नहीं कर सकते हैं? –