2012-06-05 19 views
5

में मौजूद नहीं है हमारी टीम हाल ही में विजुअल स्टूडियो 2008/.NET3.0 से विजुअल स्टूडियो 2008/.NET4.0 में माइग्रेट हो गई है। अब, वीएस -2010 मुझे एक अजीब त्रुटि संदेश देता है। यह निम्न कार्यक्रम के साथ प्रतिलिपि प्रस्तुत करने योग्य है:प्रकार 'एक्स' प्रकार 'वाई.जेड'

using System; 

namespace Some.Main 
{ 
} 

namespace SomeLib 
{ 
    interface Some 
    { 
    } 
} 

namespace ConsoleApplication1 
{ 
    using Some.Main; 
    using SomeLib; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.Write("Press enter to continue"); 
      Console.ReadLine(); 
     } 
    } 
} 

इस में VS2008 ठीक काम किया, लेकिन VS2010 में मैं निम्न त्रुटि संदेश मिलता है:

प्रकार का नाम 'मुख्य' प्रकार में मौजूद नहीं है ' SomeLib.Some '

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

दुर्भाग्यवश, मैं एक बड़े-आइश विरासत अनुप्रयोग पर काम कर रहा हूं और मैं इन नामस्थानों के नामों को आसानी से नहीं बदल सकता हूं।

मैं जानना चाहता हूं कि मैं इस त्रुटि को कैसे ठीक कर सकता हूं, और मैं भी उत्सुक हूं कि इसका कारण क्या है।

+2

कोशिश 'वैश्विक :: Some.Main उपयोग करते हुए;' –

+1

यह हास्यास्पद है। वह सटीक कोड, मोनो (नवीनतम) पर संकलित करता है। लेकिन विजुअल स्टूडियो 2010 पर, यह –

+1

@MichaelBuen यह और भी बदतर नहीं है, क्योंकि विजुअल स्टूडियो 2008 पर, यह भी संकलित करता है। – jqno

उत्तर

9

आप बस संपादक उलझन बनाते हैं। Some दोनों नामस्थान और एक इंटरफ़ेस नाम है, जाहिर है कि यह घोषित किए गए क्रम में using एस को चेक/पार्स नहीं करता है।

(जड़ नाम स्थान से शुरू करने के लिए) आप स्पष्ट आप नाम स्थान का जिक्र कर रहे हैं और नहीं प्रकार का नाम बस using घोषणा करने के लिए global:: जोड़ने बनाना चाहते हैं, इस तरह:

using global::Some.Main; 

अद्यतन
बहुत अच्छा यहाँ पर पोस्ट अतः एक टिप्पणी में @alex से जुड़े हुए: Should 'using' statements be inside or outside the namespace?

1

इस प्रयास करें:

using Some.Main; 
using SomeLib; 

namespace ConsoleApplication1 
{ 
    // instead of placing usings here. 
} 
+1

बनाता है यह काम करता है। – jqno

+2

सावधान रहें, 'आसपास के उपयोग से आगे बढ़ने से कोड ब्रेकिंग हो सकती है और * अंधेरे से नहीं किया जाना चाहिए! Http: // stackoverflow देखें।कॉम/प्रश्न/12531 9/चाहिए-उपयोग-अंदर-बाहर-बाहर-बाहर-नामस्थान – Alex

+0

@alex: हालांकि मैं हमेशा नामस्थान से बाहर निकलता हूं और कभी भी कोई समस्या नहीं सुनता। – abatishchev

4

मुझे लगता है कि IntelliSense नामकरण से उलझन में है और "समझ" नहीं है जो जो है।

संलग्न स्क्रीनशॉट दर्शाता है क्या हो रहा है: IntelliSense "सोचता है कि" Some.Main, Some नामित इंटरफेस को संदर्भित करता है शायद इसलिए है क्योंकि एक namespace कहीं भी Some बुलाया नहीं है वहाँ।

सौभाग्य से, संकलक इस तरह बेवकूफ नहीं है और कोड ठीक काम करता है, जैसा आपने कहा था।

IntelliSense being fooled

+0

और एक बिल्ड करने के बाद, इंटेलिसेन्स भी शिकायत करना बंद कर देता है। –

+0

@ हेनकहोल्टरमैन जब तक आप कोई परिवर्तन नहीं करते; तो यह वापस आता है :)। – jqno

+0

@ हेंकहोल्टरमैन और यह अधिक मजाकिया है, मैंने इसे बनाने की कोशिश की, यह संकलित करता है। फिर भी जब आप कोड में परिवर्तन करते हैं तो इसमें त्रुटि होती है। क्या विजुअल स्टूडियो आईडीई टीम और सी # कंपाइलर टीम एक अलग टीम है? –

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