विजुअल स्टूडियो में "गो टु डेफिनिशन" केवल मेटाडेटा को लाता है


132

मैं विजुअल स्टूडियो 2008 में एक वेब प्रोजेक्ट में काम कर रहा हूं। जब मैंने F12 को हिट किया (या राइट-क्लिक करें और गो टू डेफिनिशन चुनें) सोर्स पर जाने के बजाय विजुअल स्टूडियो लगातार मेटाडेटा फाइल में जा रहा है।

कुछ बिंदु:

  • सभी स्रोत कोड C # है, कोई VB.Net नहीं है
  • सभी परियोजनाएं एक ही समाधान में हैं
  • फ़ाइल संदर्भ के विपरीत सब कुछ एक परियोजना संदर्भ है (चेक और डबल-चेक किया गया)
  • मैंने क्लीन / रिबिल्ट सॉल्यूशन अप्रोच (यहां तक ​​कि टेंप डायरेक्टरी, टेम्परेरी ASP.NET फाइल्स डायरेक्टरी आदि को क्लीयर करने की बात तक) की कोशिश की है।

क्या किसी और ने इस व्यवहार को देखा है और / या यह पता है कि इसे कैसे ठीक किया जाए?


मैं केवल विभिन्न संदर्भ परियोजनाओं में vb.net और सी # के साथ मिश्रित समाधान में इस मुद्दे को मिला है। अजीब: /
बेयर्ड रानेल

एकमात्र समाधान मैंने यहां देखा है: http://johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html
NotMe

मेरे लिए Visual Studio के पुनरारंभ ने इस समस्या (बहु प्रोजेक्ट समाधान के भीतर .net कोर प्रोजेक्ट पर) को ठीक कर दिया है।
निको

जवाबों:


59

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


यह बहुत अच्छी जानकारी है। मुझे यह जानने की उत्सुकता है कि क्या आप लोगों ने SP1 स्थापित किया है?
NotMe

ठीक है, अगर मुझे वह जानकारी वेब पर कहीं भी मिल जाए तो मैं आपको बताऊंगा। मैं वी.एस. 2008 9.0.21022.8 आरटीएम चला रहा हूं, लेकिन अगर मुझे वीएस 2008 SP1 या मूल
पीएफंक

महान, धन्यवाद - इससे मुझे मदद मिलती है। यदि यह पाठ / xml संपादक का उपयोग करके इसे खोलना है तो इसे csproj फ़ाइल में ProjectReference होना चाहिए। किसी अन्य को हटाया जाना चाहिए।
विक्टर गेलमुत्दिनोव

3
यह भी हो सकता है यदि प्रोजेक्ट प्रोजेक्ट में GUID संदर्भित प्रोजेक्ट में ProjectGuid मान से मेल नहीं खाता है
डेविड गार्डिनर

धन्यवाद! इस तरह के मुद्दे अभी भी MSVS
एलेक्स

42

ऐसा तब होता है जब आप संदर्भ को प्रोजेक्ट के रूप में नहीं जोड़ते हैं, लेकिन ऐड रेफ़रेंस डायलॉग में ब्राउज़ टैब का उपयोग करके एक dll या exe को इंगित करते हैं। यदि आप प्रोजेक्ट्स टैब का उपयोग करके संदर्भ जोड़ते हैं, तो आपको गो टू डेफिनेशन का चयन करते समय सीधे सोर्स कोड में जाना चाहिए।

हालाँकि, यदि आप ReSharper स्थापित करते हैं, तो आप ब्राउज़ कोड का उपयोग करके dll / exe में अपना संदर्भ जोड़ते हुए भी आप स्रोत कोड पर जाएंगे।


39

ऐसा लगता है कि इसे Resharper में भी सेटअप करने की आवश्यकता है। मेरा विज़ुअल स्टूडियो .NET फ्रेमवर्क स्रोत कोड पर तब तक नेविगेट नहीं करता है जब तक कि मैं इसे रेस्परर में सक्षम नहीं करता।

बाह्य स्रोत पर नेविगेट करने की अनुमति देने के लिए रिचार्पर सेटिंग्स


1
नमस्ते, यह मेरे लिए काम करता है। इसने उस समस्या को हल कर दिया। VS2015 अपडेट 3, ReSharper 2016.1.2 का उपयोग करना
Michal

25

1. अपना समाधान बंद करें।

2.<name of the solution> फ़ोल्डर में छिपी हुई .suo फ़ाइल को हटाएं जहां आपके समाधान की <name of the solution>.sln फ़ाइल मौजूद है।

3. अपना समाधान खोलें।

4. अपने समाधान का पुनर्निर्माण करें।


7
यह वह विकल्प था जिसने मेरे लिए काम किया। फिर भी, मैं VS2019 RC (16.0.0) का उपयोग कर रहा हूं और .vs \ {ProjectName} \ v16 पर निकाली गई .sou फाइल को निकालना है
Nick DeVore

1
यह मेरे लिए भी साफ कर दिया। VS2017 का उपयोग करते हुए, .sou फाइलें कई स्थानों पर थीं - ".vs \ <ProjectName> \ v15", जैसे Nick ने VS2019 को नोट किया ।sou फ़ाइल V16 उप-क्रम में है। ध्यान दें कि मेरे पास एक "... V14" उपडायर भी था, जाहिरा तौर पर पहले के VS2015 से, जिसे मैं 2017 में अपग्रेड करने से पहले एक ही सॉल्यूशन पर इस्तेमाल कर रहा था। उन्हें साफ कर दिया और सभी समस्याएं दूर हो गईं।
ब्रिबी

1
* .suo .sou वास्तविक फ़ाइल एक्सटेंशन नहीं है
माइक चेल

1
विजुअल स्टूडियो 2019 में भी। बंद समाधान, फ़ाइल एक्सप्लोरर में समाधान खोलें, .so फ़ाइलों की खोज करें और उन सभी को हटा दें। समाधान फिर से खोलें और यह फिर से काम करता है।
यमन

इस विकल्प ने मेरे लिए काम किया, धन्यवाद। VS2019 के लिए बनाम फ़ोल्डर को हटाएं और परियोजना खोलें
आशी

21

वीएस 2017 का उपयोग करने वालों के लिए (मैं इस समय 15.3.4 संस्करण पर हूं) यहां सरल कदम हैं:

  1. Windows Explorer में अपना समाधान खोलें और Visual Studio को बंद करें
  2. एक्सप्लोरर मेनू में, दृश्य चुनें और सुनिश्चित करें कि "हिडन आइटम" चेकबॉक्स चिह्नित है
  3. सबफ़ोल्डर पर नेविगेट करें .vs\[your solution name]\v15
  4. .suoफ़ाइल हटाएँ
  5. VS को पुनरारंभ करें और अपना समाधान बनाएं

इसने मेरे लिए इसे ठीक किया: F12 ने वास्तविक स्रोत फ़ाइल खोली, न कि "मेटाडेटा" संस्करण से।


जैसा कि कहीं और टिप्पणियों में कहा गया है, अगर आप VS2019 चला रहे हैं तो निर्देशिका v16 है।
ओटिस

10

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

बस संदर्भ हटाएं और तुरंत इसे वापस जोड़ें और सब कुछ हल हो जाएगा।


8

चिह्नित समाधान हमेशा काम नहीं करता है। आपको यह सुनिश्चित करना चाहिए कि प्रोजेक्ट फ़ाइलों में संदर्भित प्रोजेक्ट GUID उस प्रोजेक्ट के लिए सही GUID है जिसे आप संदर्भित करने का प्रयास कर रहे हैं। विजुअल स्टूडियो उन्हें कुछ परिस्थितियों में सिंक से बाहर निकलने की अनुमति देता है। आप एक टेक्स्ट एडिटर के साथ प्रोजेक्ट GUID से प्रोजेक्ट GUID प्राप्त कर सकते हैं। इसलिए यदि प्रोजेक्ट ए रेफरेंस प्रोजेक्ट B. टेक्स्ट एडिटर में प्रोजेक्ट B.csproj खोलें, टैग से प्रोजेक्ट GUID की प्रतिलिपि बनाएँ। तब टेक्स्ट एडिटर में प्रोजेक्ट A.csproj को खोलें, और सुनिश्चित करें कि आप सही GUID का उपयोग कर रहे हैं। इस मामले में परियोजना का नाम "बी" खोजें। पर होना चाहिए। GUID को टैग में सही से बदलें। सहेजें और पुनः लोड करें। बेशक, यह भी सुनिश्चित करें कि आपकी परियोजनाओं के लिए फ़ाइल आधारित संदर्भ हटा दिए जाएं। आप केवल प्रोजेक्ट संदर्भ चाहते हैं।


6

मैंने सभी वीएस उदाहरणों को मार दिया है, एसयूओ को हटा दिया है, स्लन लॉन्च किया है और यह मेरे लिए काम करता है ...


मेरे पास एक अप्रत्याशित msbuild दुर्घटना थी, और इस एक सहित कई तरह के मुद्दे सामने आए। इससे समस्या हल हो गई। अजीब।
क्रिस ल्यूक

3

संदर्भ dll निकालें, बिल्ड (त्रुटियों को प्राप्त करेगा), ADD संदर्भ (आपने हटाया गया) फिर से बनाएँ ... आपके फ़ंक्शन पर F12 को तब काम करना चाहिए (मेरे लिए काम किया)।


2

मुझे लगा कि मैं इस पोस्ट से अपनी समस्या को कैसे हल करूं , शायद यह आप में से कुछ के लिए भी काम करेगा।

मैंने इन चरणों का पालन किया:

  1. समाधान बंद करें।
  2. समाधान के लिए intellisense डेटाबेस फ़ाइल को हटाएँ: .ncb
  3. समाधान खोलें।
  4. समाधान का पुनर्निर्माण करें।

(मेरा मानना ​​है कि चरण 3 या 4 अनुपलब्ध डेटाबेस फ़ाइल पुन: प्राप्त करता है जब वह गायब हो)

इन्टेलिसेंस, "डिफिनिटेशन पर जाएं" और "सभी संदर्भ खोजें" को फिर से काम करना चाहिए।


2

मेरे मामले में, (विजुअल स्टूडियो प्रोफेशनल 2015 का उपयोग करके), जब मैंने एक्सएएमएल डिजाइनर को निष्क्रिय कर दिया था, तो एफ 12 ने काम करना बंद कर दिया। जैसे ही मैंने परिवर्तनों को वापस किया, और विज़ुअल स्टूडियो को पुनः आरंभ किया, F12 ने फिर से काम किया।

पुष्टि करने और फिर पोस्ट करने के लिए कई बार पैटर्न की जाँच की। आशा है कि यह किसी की मदद करता है।


1

लक्षण:

विजुअल स्टूडियो 2010 अल्टीमेट "गो टू डेफिनिशन" या "गो टू डिक्लेरेशन" या "फाइंड ऑल रिफरेंस" फीचर्स का इस्तेमाल करते समय फंक्शन, # वेडाइन्स, इत्यादि के संदर्भ खोजने में बार-बार असफल हो रहा था - अजीबोगरीब इंटेलीजेंस काम कर रहा था।

ठीक कर:

  1. Visual Studio को बंद करें
  2. हटाएँ (नाम बदलें यदि आप रूढ़िवादी होना चाहते हैं) समाधान .sdf फ़ाइल
  3. दृश्य स्टूडियो को फिर से खोलें

.Sdf फ़ाइल को स्वचालित रूप से आपके समाधान में शामिल फ़ाइलों को पार्स करके फिर से बनाया जाएगा


2
@alestanis शायद उस जवाब ने सबके लिए समस्या हल नहीं की।
न्यूज़ोलिलो

@alestanis मुझे ओपी में समस्या है, लेकिन स्वीकृत उत्तर ने मेरी मदद नहीं की .... शायद हमें उन सभी सवालों को हटाना चाहिए जिनके पास एक स्वीकृत उत्तर है?
कार्ल

1

मेरे लिए, GUID समाधान काम नहीं किया और मैं अपनी .ncb फ़ाइल नहीं ढूँढ सका। (या हो सकता है कि मैं आलसी हूं और कठिन नहीं लग रहा था, लेकिन यह महत्वपूर्ण नहीं है।) दृश्य स्टूडियो के पुनर्निर्माण और पुनः आरंभ करने से भी मदद नहीं मिली।

मैंने जो किया वह था क्लोज़ विजुअल स्टूडियो और डिलीट .dll और .pdb को मेटा डेटा फ़ाइल के शीर्ष में संदर्भित किया जा रहा है जिसे मेरी इंटैलिजेंस लिंक करती रही। मेरे मामले में इसका मतलब था कि मैंने अपनी .dll को हटा दिया है और यह यूटिलिटीज / बिन / रिलीज से .pdb फाइल है। (उपयोगिताएँ .dll प्रोजेक्ट का नाम है, जिसके साथ मैं समस्या कर रहा था।) फिर मैंने विज़ुअल स्टूडियो को फिर से शुरू किया और .dll तब संपूर्ण समाधान का पुनर्निर्माण किया। और कोई समस्या नहीं!


1

बस एक और कारण मिल गया। मैंने अपनी वेब परियोजना को 4.0 में अपग्रेड किया, लेकिन 2.0 में कक्षा पुस्तकालयों को छोड़ दिया। उस समय मेरे समाधान में सभी कक्षा पुस्तकालयों को मेरी वेब परियोजना से फ़ाइल संदर्भ के रूप में माना गया था। किसी और की मदद कर सकते हैं ...


1

मुझे एक ही मुद्दे का सामना करना पड़ा और उनके एक साथी ने मुझे निम्नलिखित समाधान दिया और यह काम कर गया! यदि उपरोक्त में से कोई भी आपके लिए काम नहीं करता है,

  1. सभी संदर्भ निकालें और उन्हें वापस जोड़ें (सुनिश्चित करें कि रास्ता सही है)
  2. सॉल्यूशन प्रॉपर्टीज पर जाएं , और सभी प्रोजेक्ट्स के प्रोजेक्ट डिपेंडेंसीज को रिकवर करें। सुनिश्चित करें कि जिस प्रोजेक्ट का आप उपयोग कर रहे हैं, वह उस प्रोजेक्ट में आश्रित के रूप में जोड़ा गया है जिस पर आप काम कर रहे हैं।

1

मैंने सभी सुझाए गए कदम उठाए लेकिन कुछ भी नहीं बदला गया है
और अंत में राइट क्लिक करें और संदर्भ मेनू जोड़ें, प्रोजेक्ट टैब

  1. बस संदर्भ परियोजना को अचयनित किया।
  2. समाधान सहेजें।
  3. उसी प्रोजेक्ट को चुनें।
  4. समाधान का पुनर्निर्माण करें।

समस्या हल हो गई। आशा है कि यह किसी एक को मदद करेगा।


1

नीचे कदम मेरे लिए काम किया।

  1. .Csproj फ़ाइल पर जाएँ
  2. इसे नोटपैड गो में खोलें जहां लाइन संदर्भित है।<Reference Include="">
  3. लाइन को हटा दें

    <SpecificVersion>False</SpecificVersion> 
    or 
    <SpecificVersion>True</SpecificVersion>
    

1

Visual Studio से dll फ़ाइलों को हटाने के बाद और समाधान एक्सप्लोरर से उन्हें मैन्युअल रूप से वापस जोड़ने के बाद -> वेबसाइट -> जोड़ें -> संदर्भ और IIS में 32-बिट अनुप्रयोगों को सक्षम करने ने इसे मेरे लिए निर्धारित किया।


1

# 1

"दृश्य - ऑब्जेक्ट ब्राउज़र" की जाँच करें और यदि आप एक ही नाम के साथ एक से अधिक असेंबली देखते हैं - इसलिए यह त्रुटि हो रही है।

हमारे लिए यह वीएस 2019 में एक बग था:

यदि आपके पास App_Codeफ़ोल्डर में ASP.NET "रेज़र हेल्पर्स" है तो विज़ुअल स्टूडियो 2019 यह व्याख्या करता है कि एक अलग असेंबली के रूप में लेकिन उसी नाम के साथ, जो वास्तविक असेंबली को छुपाता है।

आंशिक सुधारों या HTML सहायकों के लिए उन सहायकों को फिर से लिखने के अलावा इसके लिए कोई भी सुधार नहीं है (यदि आपको .NET कोर में माइग्रेट करने की योजना है तो भी आपको ऐसा करना होगा)।

MS की साइट पर इस वर्कअराउंड को देखें और कृपया बग को अपग्रेड करें ताकि MS इसे ठीक करे

https://developercommunity.visualstudio.com/solutions/1008795/view.html (कृपया आगे बढ़ें)

# 2

ऑब्जेक्ट ब्राउज़र में एक ही असेंबली को दो बार क्यों लोड किया जा सकता है, यदि आपके पास एक यूनिट-टेस्ट प्रोजेक्ट है जो आईआईएस-एक्सप्रेस प्रक्रिया शुरू करता है और इसे ठीक से कभी नहीं मारता है।


0
  1. VS से वेब साइट मेनू पर क्लिक करें।
  2. संदर्भ जोड़ें ...
  3. डायलॉग बॉक्स से प्रोजेक्ट टैब पर क्लिक करें
  4. Ddl का चयन करें
  5. ओके बटन पर क्लिक करें

0

मेरे मामले में, मैं हाल ही में बदल गया था

<mvcBuildViews>

मेरी साइट की .csproj फ़ाइल में "सही" करने के लिए (मेरे रेज़र व्यू फ़ाइलों में संकलन त्रुटियों को खोजने के लिए: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual-Studio+2012+returned + संकलन + त्रुटियों + पर + रेजर + वाक्यविन्यास + त्रुटि + में + एस्प + नेट + वेब + पेज + 2 + ), और जब मैंने बनाया तो मैं अपनी साइट / obj / डीबग / निर्देशिका के भीतर से त्रुटियां प्राप्त कर रहा था। उन फ़ाइलों में से किसी से (जो पुराने थे), राइट-क्लिक करने और "गो टू डेफिनिशन" का चयन करने से मुझे [मेटाडेटा] संस्करण मिलेगा।

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


0

मैं सिर्फ वीएस 2013 पर इस समस्या में भाग गया। कुछ मैं कर सकता था (क्या?) अलग नहीं CSPROJ फ़ाइल में GUID बदल रहा था। चूंकि CSPROJ फाइलें SVN में जाँची जाती हैं, इसलिए मैं अपने स्थानीय देव पर GUID नहीं बदल सकता। इसके बजाय, मैं लगातार एसवीएन द्वारा स्थानीय परिवर्तन को हर बार घटित होने पर पलट रहा था।

सबसे पहले, मुझे बदलती GUID समस्या को हल करना था।

  1. CSPROJ को चेक-इन संस्करण में वापस लाएं।
  2. एक पाठ संपादक के माध्यम से CSPROJ खोलें, न कि वी.एस.
  3. प्राचीन CSPROJ फ़ाइल से मान निकालें।

    {B1234567-5123-4AAE-FE43-8465767788ED}

  4. एसएलएन फ़ाइल को टेक्स्ट एडिटर के माध्यम से खोलें, न कि वी.एस.

  5. समाधान में प्रोजेक्ट संदर्भ का पता लगाएँ।

    प्रोजेक्ट ("{FAE12345-3210-1357-B3EB-00CA4F396F7C}" = "= Some.Project", ".... \ विधानसभाओं \ Some.Project \ some.Project.cnroj", "{B7654321-5321-4AAE-" FE3D-ED20900088ED} "EndProject

  6. सूचीबद्ध पहला GUID सॉल्यूशन GUID है। आपके SLN में संदर्भित प्रत्येक प्रोजेक्ट के लिए, आपको पहले तर्क पर दोहराए गए इस मान को देखना चाहिए। .Csproj के बाद वाला GUID वह है जिसे आप मूल GUID से बदलना चाहते हैं।

यह पहली समस्या को हल करना चाहिए, लेकिन मेटा डेटा में "गो टू डेफिनिशन" लैंडिंग हल नहीं है। हमारी SLN फ़ाइल में, एक मास्टर प्रोजेक्ट (हमारी वेब साइट) है, इसलिए SLN फ़ाइल में इसकी प्रविष्टि में कई GUID मानों के साथ ProjectSection प्रविष्टि होनी चाहिए। यहाँ एक उदाहरण है:

ProjectSection(ProjectDependencies) = postProject
{AC50D230-24C4-4DCA-BAAD-355E6AF5EFBD} = {AC50D230-24C4-4DCA-BAAD-355E6AF5EFBD}
EndProjectSection

ध्यान दें कि इस संग्रह में गुम GUID मेरी प्राचीन परियोजना से एक है।

  1. ProjectSection और EndProjectSection के बीच अंतिम प्रविष्टि के रूप में गुम GUID जोड़ें। प्रारूप प्रति पंक्ति प्रतीत होता है, और यह {GUID} = {GUID} है।
  2. फ़ाइल सहेजें।
  3. अपना समाधान खोलें।
  4. नए जोड़े गए प्रोजेक्ट और "परिभाषा पर जाएं" पर राइट-क्लिक करें।

0

मेरे पास शामिल दो परियोजनाओं (जो एक नहीं-नहीं है) के बीच एक परिपत्र संदर्भ था । इसे हल करने के लिए मेरे कोड को थोड़ा सा पुनर्गठन करना पड़ा क्योंकि दोनों परियोजनाएं वास्तव में एक दूसरे पर निर्भर थीं। संदर्भों में से एक को हटाने से अंतर्मुखी समस्या हल हो गई। यह तार्किक रूप से त्रुटिपूर्ण था और मैंने शायद इस त्रुटि के बिना ध्यान नहीं दिया होगा!


0

यह एक मेरे लिए काम किया:

  1. अपने समाधान एक्सप्लोरर में संदर्भ फ़ोल्डर में dll पर राइट क्लिक करें
  2. Dll फ़ाइल निकालें
  3. फिर संदर्भ फ़ोल्डर पर राइट क्लिक करें
  4. Dll फ़ाइल में फिर से संदर्भ जोड़ें

0

यह तब हो सकता है जब आप किसी ऐसी परियोजना में परिभाषा में कूदने की कोशिश कर रहे हों जो अनलोड (अनुपलब्ध) हो। अनलोड किए गए प्रोजेक्ट पर राइट-क्लिक करें और "रीलोड प्रोजेक्ट" चुनें।


-1

सबसे अच्छा अनुमान है कि आपके पास डिबग जानकारी नहीं है। हो सकता है कि आपके पास डिस्क पर आपके असेंबली की कई प्रतियां हों और इसमें .pdb फ़ाइल नहीं है।

अपनी परियोजनाओं से अपने विधानसभा नामों की खोज करें और उन सभी को हटा दें और पुनर्निर्माण करें।

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