मैं अपनी कक्षा की लाइब्रेरी का संदर्भ क्यों नहीं दे सकता?


86

मेरे पास एक समाधान है जिसमें विजुअल स्टूडियो 2008 में एक वेबसाइट और एक क्लास लाइब्रेरी शामिल है।

फिर मेरे पास समाधान के बाहर एक और वेब साइट परियोजना है जिसे कक्षा के पुस्तकालय को संदर्भित करने की आवश्यकता है। मैं बिन फ़ोल्डर या प्रोजेक्ट पर राइट क्लिक करता हूं और Add Reference का चयन करता हूं, फिर मेरी क्लास लाइब्रेरी प्रोजेक्ट का चयन करता हूं, यह 15 या इतने DLL जोड़ता है कि क्लास लाइब्रेरी को वेबसाइटों को बिन फ़ोल्डर की आवश्यकता होती है, लेकिन .cs फ़ाइलों में से कोई भी उपयोग किए गए कथनों को नहीं पहचानता है।

using MyLibrary.MyFolder;

यह कहता है कि यह इसे हल नहीं कर सकता है, और ReSharper का कहना है कि इसे सुरक्षित रूप से हटाया जा सकता है क्योंकि इसका उपयोग नहीं किया जा रहा है।

ReSharper यह पहचान सकता है कि उसे संदर्भ की आवश्यकता है और यह सुझाव देता है कि यह "संदर्भ MyLibrary और MyFolder का उपयोग करें"। मुझे यकीन नहीं है कि यह सुझाव दे रहा हूं कि मेरे पास पहले से ही एक संदर्भ है। जब मैं सुझाव के साथ जाता हूं, मुझे त्रुटि मिलती है

"संदर्भ मॉड्यूल में विफल। संभवतः, संदर्भ परियोजनाओं के बीच परिपत्र निर्भरता का उत्पादन करेगा।"

मैंने वेबसाइटों के प्रॉपर्टी पेजों पर जाने और सभी संदर्भों को हटाने और उन्हें फिर से जोड़ने की कोशिश की है, लेकिन यह वही त्रुटियां देता है। किसी भी विचार क्यों यह काम नहीं कर रहा है?


क्लास लाइब्रेरी में .net फ्रेमवर्क संस्करण की जाँच करें और जिस प्रोजेक्ट का आप संदर्भ ले रहे हैं
मनिदीप इन्नमूरी

जवाबों:


164

यह भी जांच लें कि जिस प्रोजेक्ट को आप शामिल करने का प्रयास कर रहे हैं, उसके लिए नए समाधान की परियोजनाएं एक संगत ढांचे के खिलाफ चलती हैं। मैं एक 3.5 परियोजना में एक 4.0 परियोजना के लिए एक संदर्भ शामिल करने की कोशिश कर रहा था।


3
कुडोस! मैं 4.5 के रूप में अपने समाधान का निर्माण कर रहा था और इसे 4.0 से जोड़ रहा था। हमारी वर्तमान 4.0 आवश्यकता के कारण, मैंने नए समाधान को 4.0 पर डाउनग्रेड कर दिया है और अब मेरी अन्य परियोजना में इसके खिलाफ कोई समस्या नहीं है। +1 मदद करने के लिए मुझे समझदार रहो!
डेविड पीटरसन

1
मैंने इस परियोजना के साथ पिछली कई बाधाओं को दूर किया था, जब मुझे यह त्रुटि मिली तो मैं तौलिया में फेंकने वाला था। आपने इसे बचा लिया, धन्यवाद!
टोनी डी

1
इस तरह से उम्मीद नहीं थी कि समस्या हल हो जाएगी! कूल
एनफ

1
तब Microsoft को यह कहना चाहिए और उन सभी को एक ही संस्करण में रखने का विकल्प शामिल करना चाहिए।
PRMan

1
मेरा दिन बचाया! VisualStudio भी मुझे इस बारे में याद दिलाते हुए चेतावनी नहीं देगा :(
रिबेल रिबेरो

86

मैंने पाया कि इस मुद्दे को कैसे ठीक किया जाए (मेरे लिए कम से कम)। यह क्यों काम किया, मुझे यकीन नहीं है, लेकिन यह किया। (मैंने बस एक दूसरी वेबसाइट के खिलाफ कोशिश की, जो एक ही समस्या थी और निम्नलिखित समाधान ने उसके लिए भी काम किया)।

मैंने परियोजनाओं की सामान्य सफाई और पुनर्निर्माण, अपने सभी विज़ुअल स्टूडियो इंस्टेंसेस को बंद करने और उन्हें पुनः आरंभ करने की कोशिश की, यहां तक ​​कि अपने कंप्यूटर को पुनरारंभ करने का भी प्रयास किया।

क्या वास्तव में काम किया, दृश्य स्टूडियो में परियोजना खोल रहा था, सभी खुले टैब बंद कर रहा था, और फिर इसे बंद कर रहा था।

इससे पहले कि मैंने टैब्स को खुला छोड़ दिया क्योंकि मुझे नहीं लगा कि यह मामला था (और मैं शायद ही कभी उन टैब को बंद कर रहा हूं जो मैं उपयोग कर रहा हूं)।


बस फिर से शुरू वी.एस. मेरे लिए काम किया। उस समस्या का कारण एक प्रोजेक्ट था / Namespace का नाम बदलकर री # में एक बग को ट्रिगर करना था।
mbx

मेरे लिए भी काम किया। मैंने आपके कहे अनुसार सभी टैब बंद कर दिए और फिर अपनी IDE और वॉइला को फिर से शुरू किया, मैं अपनी कक्षा की लाइब्रेरी को अब संदर्भित कर सकता हूं। धन्यवाद।
युवा

31

एक संभावना यह है कि क्लास लाइब्रेरी का लक्ष्य .NET फ्रेमवर्क संस्करण परियोजना की तुलना में अधिक है।


8

मुझे एक समान समस्या थी, क्या मेरे सभी संदर्भों को रेस्परर द्वारा खराब किया जा रहा है - मेरे लिए जो समाधान काम किया गया है वह है कि रेसर्पर कैश को साफ़ करना और फिर वी.एस. को पुनरारंभ करना।

उपकरण-> विकल्प-> पुनर्जीवन-> विकल्प-> सामान्य-> स्पष्ट कैश बटन पर क्लिक करें और वी.एस. को पुनरारंभ करें


4

मुझे ऐसी ही समस्याएं थीं जहां वीएस कभी-कभी निर्माण करते हैं और कभी-कभी नहीं। कुछ खोज और प्रयासों के बाद मुझे पता चला कि मेरे पास अलग-अलग पुस्तकालयों ('FileManager') में एक ही नाम के साथ एक वर्ग का अस्पष्ट संदर्भ था। जो प्रोजेक्ट नहीं बनेगा वह मेरे यूनिट टेस्ट थे जो मेरे समाधान में सभी मॉड्यूल का संदर्भ देते थे। एक विशिष्ट मॉड्यूल के संदर्भ को लागू करना मेरे लिए चीजों को छांटता है।

मेरी बात यह है: ReSharper या VS को दोष देने के बजाय, यह जांचने के लिए एक अच्छा विचार हो सकता है कि क्या वास्तव में किसी तरह का परिपत्र संदर्भ नहीं है। अधिक बार, विभिन्न मॉड्यूल में समान नामों वाली कक्षाएं भ्रम पैदा कर सकती हैं और अक्सर खराब डिजाइन का लक्षण होता है (जैसे मेरे मामले में)।


+1 मेरे मामले में विभिन्न नामस्थान वाली दो परियोजनाओं को एक ही नाम (विजुअल स्टूडियो में एप्लिकेशन टैब में असेंबली का नाम) के साथ संकलित किया गया था - माइग्रेशन प्रोजेक्ट के कारण यह (कुछ) अर्थ होता है; कमांड लाइन से MSBuild ने हमें एक भी इतना सहायक सुराग नहीं दिया जिसने हमें थोड़ी देर के लिए आश्चर्यचकित कर दिया The type or namespace name 'A' does not exist in the namespace 'B':। ध्यान दें कि इसके लिए कोई चेतावनी नहीं आई ...
जोनो

3

ऐसा लगता है कि ReSharper के साथ एक समान मुद्दा:

http://www.jetbrains.net/devnet/thread/275827

एक बिल्ड थ्रेड में एक उपयोगकर्ता के अनुसार पहली बिल्ड के बाद समस्या (CTRL + Shift + B) को ठीक करता है ..

विशेष रूप से उनके मामले में ReSharper के साथ एक मुद्दे की तरह लगता है .. क्या आपने चेतावनी और संभावित गलत त्रुटियों की परवाह किए बिना निर्माण की कोशिश की है?


मैं इससे पहले आया था। और मुझे यकीन नहीं है कि अगर यह समस्या "निश्चित" बनती है। यह संकलन करता है, लेकिन यह अभी भी वर्गों को दर्शाता है, बयानों, कक्षाओं आदि का उपयोग करते हुए, मान्यता प्राप्त नहीं होने के रूप में। हालाँकि, अगर मैं जानबूझकर कुछ विधि कॉल को तोड़ता हूं, तो दृश्य स्टूडियो त्रुटि को पहचानता है, भले ही यह मुझे पैरामीटर सूची नहीं दिखाएगा। मुझे लगता है कि यह ReSharpers गलती है।
ब्रैंडन

3

चूंकि वे दोनों एक ही समाधान में हैं, इसलिए DLL के संदर्भ को जोड़ने के बजाय, स्वयं क्लास लाइब्रेरी प्रोजेक्ट के लिए एक संदर्भ जोड़ें (संदर्भ जोड़ें संवाद में इसके लिए एक टैब होगा)।

आह, यह एक अलग समाधान है। याद किया कि आप अपने वर्ग पुस्तकालय के संकलित DLL के संदर्भ को जोड़ते हुए परियोजना के संदर्भ को जोड़ने के बजाय कैसे प्रयास करते हैं। Add Reference डायलॉग में एक ब्राउज टैब होता है जो ऐसा करता है।


1
इसने मेरे लिए काम किया, अन्य समाधानों ने एक संदर्भ जोड़ने का सुझाव दिया लेकिन किसी कारण से मुझे यह नहीं मिला जब तक कि मैंने समाधान एक्सप्लोरर में मुख्य परियोजना पर क्लिक नहीं किया।
राल्फराम

3

पुष्टि के बाद asp.net के एक ही संस्करण का इस्तेमाल किया जा रहा था। मैंने प्रोजेक्ट हटा दिया। समाधान को साफ किया और परियोजना को फिर से जोड़ा। इसी से मेरा काम बना है।


मैं एक ही समस्या थी और यह मदद करने के लिए लग रहा था। बहुत अजीब है।
अनुभवहीनता

2

यदि आप एक ही समाधान में मौजूद प्रोजेक्ट्स के लिए असेंबलियों का संदर्भ दे रहे हैं, तो \ bin \ Debug (या \ bin \ रिलीज़) फ़ोल्डर में dll के लिए ब्राउज़ करने के बजाय एक प्रोजेक्ट संदर्भ ("प्रोजेक्ट्स" टैब का उपयोग करके) जोड़ें (उपयोग करके) "ब्राउज़ करें" टैब)। नीचे देखें स्क्रीन शॉट केवल असेंबली / dll फ़ाइल के लिए ब्राउज़ करें यदि इसे बाहरी असेंबली माना जाता है।

यहाँ छवि विवरण दर्ज करें


2

मैंने अपनी परियोजना के * .csproj.user (resharper फ़ाइल) को हटा दिया, फिर, सभी टैब बंद करें और इसे फिर से खोलें। उसके बाद मैं अपनी परियोजना को संकलित करने में सक्षम था और कोई भी चेतावनी चेतावनी नहीं थी।


मैंने ऐसा किया और फिर से विधानसभा की जानकारी दिखाते हुए मेरी इंटेलीजेंस समझ में आ गई, लेकिन जैसे ही मैंने रिजेक्ट करने की कोशिश की, उस विधानसभा के लिए मेरी इंटेलीजेंस की जानकारी मिट गई और बिल्ड फेल हो गया। यह एक अजीब त्रुटि है!
डेविड पीटरसन

मुझे स्क्रैच से अपने प्रोजेक्ट को फिर से बनाना था ... मुझे लगता है कि मैंने अपेक्षाकृत नए प्रोजेक्ट पर NuGet में कई अनइंस्टॉल / इंस्टॉल किए।
एडम नोफ़िंगर

मेरे लिए काम कर रहे संदर्भों को हटाना और फिर से बनाना, पूर्ण प्रोजेक्ट फ़ाइल हटाना ओवरकिल हो सकता है।
danjuggler

2

मुझे यह समस्या थी। मुझे यह पता लगाने में उम्र लग गई। मेरी मदद के लिए मेरे कंधे पर लोग थे। हमने विजुअल स्टूडियो को फिर से बनाया, साफ किया और फिर से शुरू किया और इसे ठीक नहीं किया। हमने संदर्भ हटा दिए और पुनः जोड़ दिए ...

कोई फायदा नहीं हुआ .... तक!

मेरी समस्या का हल यही था मेरी कक्षा की घोषणा गलत तरीके से की गई थी।

इससे पहले कि आप मुझे कठोरता से न्याय करना शुरू करें, मुझे यह समझाने की अनुमति दें कि यह बेवकूफ क्यों नहीं था, और यह भी कि प्रोग्रामरों के सबसे बुद्धिमान द्वारा भी यह गलती क्यों की जा सकती है।

चूंकि नाम में गलती जल्दी थी, इसलिए जब मैंने टाइप करना शुरू किया तो यह इंटेलीजेंस क्लास लिस्टिंग में दिखाई नहीं दे रहा था।

जैसे

कक्षा का नाम: Message.cs

घोषणा:

public class Massage
{
    //code here

}

एक नज़र में और एक छोटे से फ़ॉन्ट में, संदेश संदेश के समान दिखता है।

टाइपिंग एम ने कई कक्षाएं सूचीबद्ध कीं, इसलिए मैंने ई टाइप किया, जो गलत संस्करण में दिखाई नहीं दिया, जिसने यह धारणा दी कि वर्ग को संकलक द्वारा नहीं उठाया गया था।


तो अनिवार्य रूप से आपके पास एक टाइपो था। यह वास्तव में दूसरों के लिए उपयोगी नहीं है।
टायलरएच

0

वीएस 2010 में मेरे पास एक समान मुद्दा था, जब एमवीसी 2 आवेदन के लिए एक परीक्षण परियोजना का निर्माण किया गया था। लक्षण समान थे।

ReSharper का संदेश कुछ भ्रामक था। एक पल के लिए मैंने ReSharper को पूरी तरह से नजरअंदाज कर दिया और इसे "मैन्युअल VS तरीका" किया:

  1. मैंने हल साफ किया।
  2. मैंने MVC प्रोजेक्ट के लिए मैन्युअल रूप से संदर्भ जोड़ा।
  3. मैंने मैन्युअल रूप से निर्देशों का उपयोग करके जोड़ा।
  4. Ctrl-Shift-ख

इस स्तर पर मुझे एक संकलन त्रुटि मिली: मुझे System.Web.Mvcअपनी परीक्षण परियोजना (आह) में विधानसभा को संदर्भित करना चाहिए था । इस संदर्भ को जोड़ने से परियोजना संकलित हो जाती है। ReSharper समस्याएं बनी रहती हैं, लेकिन ReSharper परीक्षण धावक काम करता है।

जब मैं VS को पुनरारंभ करता हूं, तो ReSharper त्रुटियां बहुत दूर हो जाती हैं। मुझे यकीन नहीं है कि यदि पुनरारंभ आवश्यक है - बस .cs फ़ाइल को बंद करना पर्याप्त हो सकता है।

अब से, जब मैं ReSharper संदेश देखता हूं

संदर्भ मॉड्यूल में विफल। संभवतः, संदर्भ परियोजनाओं के बीच परिपत्र निर्भरता का उत्पादन करेगा।

मैं पढ़ लूंगा

संदर्भ मॉड्यूल में विफल। शायद, संदर्भ परियोजनाओं के बीच परिपत्र निर्भरता का उत्पादन करेगा, या आप संदर्भ की निर्भरता की निर्भरता के कुछ संदर्भों को याद कर रहे हैं।


0

एक और संभावित सुधार जो सिर्फ मेरे लिए काम करता है:

यदि आपके पास असेंबली A है, जो असेंबली B का संदर्भ देता है, जो दोनों एक गैर-प्रोजेक्ट (बाह्य) असेंबली X का संदर्भ देते हैं, और असेंबली B का कोड यह नहीं पहचान पाएगा कि आपने X को संदर्भित किया है, तो क्रम में निम्नलिखित चरणों का प्रयास करें:

  • BOTH A और B से X का संदर्भ छोड़ें
  • एक्स को बी में फिर से बनाना
  • ए में एक्स के लिए फिर से बनाना

जाहिरा तौर पर, वीएस एक परियोजना में एक बाहरी विधानसभा के संदर्भ को नहीं पहचानेंगे जो एक अन्य परियोजना की निर्भरता है जो पहले से ही बाहरी का संदर्भ देता है। जमीन से ऊपर फिर से संदर्भ स्थापित करके, आप इसे दूर करते हैं। यह बहुत अजीब है।


VS2015 पर दिलचस्प लेकिन सच है। धन्यवाद!
स्कॉट निमरोड

0

मुझे इस समस्या का सामना करना पड़ा, और मैंने दृश्य स्टूडियो को बंद करके, दृश्य स्टूडियो को फिर से खोलना, समाधान को साफ करना और पुनर्निर्माण किया। इसने मेरे लिए काम किया।


0

यदि TFS का उपयोग करते हैं, तो नवीनतम प्राप्त करें (पुनरावर्ती) हमेशा काम नहीं करता है। इसके बजाय, मैं स्रोत नियंत्रण पर क्लिक करके नवीनतम प्राप्त करने के लिए मजबूर करता हूं => विशिष्ट संस्करण प्राप्त करें और फिर दोनों बॉक्स पर क्लिक करें। इससे काम चल जाता है।

यहाँ छवि विवरण दर्ज करें

यदि यह अभी भी काम नहीं करता है, तो सू फाइल को हटाने (आमतौर पर समाधान के रूप में एक ही स्थान पर पाया जाता है) दृश्य स्टूडियो को स्रोत से सभी फाइलों को प्राप्त करने के लिए मजबूर करता है (और बाद में सू फाइल को फिर से बनाता है)।

यदि वह काम नहीं करता है तो अपनी सभी खुली फाइलों को बंद करने और विजुअल स्टूडियो को बंद करने का प्रयास करें। जब आप अगला दृश्य स्टूडियो खोलते हैं तो इसे ठीक किया जाना चाहिए। इस तरह से हल किया जाता है कि एक बग बग है।


0

मैं हाल ही में इसी तरह के मुद्दे पर लड़खड़ा गया था। मैं Visual Studio 2015 में Resharper Ultimate 2016.1.2 के साथ काम कर रहा हूं। मैं किसी अन्य असेंबली से एक क्लास का संदर्भ देने की कोशिश करते हुए अपने कोड बेस में एक नया वर्ग जोड़ने की कोशिश कर रहा था, लेकिन रेस्पर उस पैकेज के लिए एक त्रुटि फेंक देगा।

सह-कार्यकर्ता की कुछ मदद से, मुझे पता चला कि संदर्भित नाम वैश्विक नामस्थान में मौजूद था और नई कक्षा से सुलभ नहीं था क्योंकि यह उसी नाम की अन्य इकाई द्वारा छिपा हुआ था जो वर्तमान नामस्थान में मौजूद था।

आवश्यक नाम स्थान से पहले एक 'वैश्विक ::' कीवर्ड जोड़ने से मुझे उस वर्ग का संदर्भ देने में मदद मिली जिसकी मैं वास्तव में तलाश कर रहा था। इस पर अधिक विवरण नीचे सूचीबद्ध पृष्ठ पर पाया जा सकता है:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx


0

यदि दोनों परियोजनाएं एक ही समाधान के भीतर समाहित हैं, तो यह उस परियोजना के लिए संदर्भ जोड़ देगा जो आपको ज़रूरत है, न कि इसके संकलित डीएल।

यहाँ छवि विवरण दर्ज करें


-1

दुर्भाग्य से केवल एक चीज जो मेरे लिए काम करती थी, वह पूरी तरह से हटा रही थी और क्लास लाइब्रेरी प्रोजेक्ट को फिर से बना रही थी। उसके बाद ही ASP.Net वेब प्रोजेक्ट उन usingकथनों को पहचानता है जो क्लास लाइब्रेरी प्रोजेक्ट को संदर्भित करता है। यह Visual Studio 2010 के साथ था, ReSharper का उपयोग नहीं कर रहा था।


-1

मेरा भी ऐसा ही मुद्दा था। मेरे लिए जो काम किया वह यह है कि मैंने विज़ुअल स्टूडियो से गलत क्लास लाइब्रेरी जोड़ी थी । मैंने विज़ुअल स्टूडियो की खोज सुविधा का उपयोग करके जोड़ा।

मुझे जो करने की ज़रूरत थी वह थी नई परियोजना> विज़ुअल सी #> क्लास लाइब्रेरी जोड़ें । और यह नव जोड़ा वर्ग पुस्तकालय सही है और अब इसे किसी भी परियोजना के संदर्भ में जोड़ा जा सकता है।


-4

आप क्लास लाइब्रेरी का संदर्भ जोड़ना भूल सकते हैं जिसे आपको आयात करने की आवश्यकता थी।

उस क्लास लाइब्रेरी पर राइट क्लिक करें जिसे आप आयात करना चाहते हैं (जिसमें कई आयातित क्लास लाइब्रेरीज़ हैं), -> Add-> संदर्भ (प्रोजेक्ट्स का चयन करें-> समाधान-> उस क्लास लाइब्रेरी का चयन करें जिसे आप से आयात करना चाहते हैं-> OK)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.