"Gehe zur Definition" in Visual Studio ruft nur die Metadaten auf

132

Ich arbeite in einem Webprojekt in Visual Studio 2008. Wenn ich F12 drücke (oder mit der rechten Maustaste klicke und zur Definition gehe), wechselt Visual Studio konsistent zur Metadatendatei, anstatt zur Quelle zu wechseln.

Ein paar Punkte:

  • Der gesamte Quellcode ist C #, es gibt kein VB.Net
  • Alle Projekte sind in der gleichen Lösung
  • Alles ist eine Projektreferenz im Gegensatz zu einer Dateireferenz (geprüft und doppelt geprüft)
  • Ich habe den Clean / Rebuild Solution-Ansatz ausprobiert (sogar bis zum Löschen des Temp-Verzeichnisses, des temporären ASP.NET-Dateiverzeichnisses usw.).

Hat jemand anderes dieses Verhalten gesehen und / oder weiß, wie man es behebt?

pfunk
quelle
Ich hatte dieses Problem nur in gemischten Lösungen mit vb.net und c # in verschiedenen Projekten, auf die verwiesen wird. Seltsam: /
Bayard Randel
Die einzige Lösung, die ich gesehen habe, ist: http://johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html
NotMe
Für mich wurde dieses Problem durch einen Neustart von Visual Studio behoben (bei einem .net Core-Projekt innerhalb einer Multiprojektlösung).
Niico

Antworten:

59

Nun, ein anderer Entwickler hat die Antwort gefunden. Das spezifische Projekt, mit dem wir ein Problem hatten, wurde ursprünglich als Dateireferenz hinzugefügt, dann entfernt und als Projektreferenz hinzugefügt. Visual Studio hat jedoch beide in der csproj-Datei für die Website gespeichert, was das Problem verursacht hat. Er ging hinein und bearbeitete die csproj-Datei manuell, um den Dateiverweis auf das Problemprojekt zu entfernen, und alles ist jetzt behoben

pfunk
quelle
Dies sind großartige Informationen. Ich bin gespannt, ob ihr SP1 installiert habt.
NotMe
Wenn ich diese Informationen irgendwo im Internet finden könnte, würde ich es Ihnen sagen. Ich verwende VS 2008 9.0.21022.8 RTM, aber ich werde verdammt sein, wenn ich irgendwo finden kann, ob das VS 2008 SP1 oder Original entspricht
pfunk
Großartig, danke - das hilft mir. Es sollte ProjectReference in der csproj-Datei sein, wenn Sie es mit dem Text- / XML-Editor öffnen. Alle anderen sollten entfernt werden.
Victor Gelmutdinov
3
Dies kann auch passieren, wenn die GUID in der ProjectReference nicht mit dem ProjectGuid-Wert im referenzierten Projekt übereinstimmt
David Gardiner
Vielen Dank! Die Probleme dieser Art bestehen weiterhin in MSVS
Alex
42

Dies geschieht, wenn Sie keine Referenz als Projekt hinzufügen, sondern auf der Registerkarte Durchsuchen im Dialogfeld Referenz hinzufügen auf eine DLL oder Exe verweisen. Wenn Sie über die Registerkarte Projekte eine Referenz hinzufügen, sollten Sie direkt zum Quellcode wechseln, wenn Sie Zur Definition wechseln auswählen.

Wenn Sie jedoch ReSharper installieren , gelangen Sie zum Quellcode, auch wenn Sie Ihren Verweis auf der Registerkarte Durchsuchen zu einer DLL / Exe hinzugefügt haben.

Vadim
quelle
39

Sieht so aus, als müsste es auch in Resharper eingerichtet werden. Mein Visual Studio navigiert nicht zum .NET Framework-Quellcode, bis ich ihn in Resharper aktiviere.

Resharper-Einstellungen, um die Navigation zu einer externen Quelle zu ermöglichen

Jeson Martajaya
quelle
1
Hallo, es funktioniert bei mir. Es hat dieses Problem gelöst. Verwenden von VS2015 Update 3, ReSharper 2016.1.2
Michal
25

1. Schließen Sie Ihre Lösung.

2. Löschen Sie die versteckte <name of the solution>.suo-Datei in dem Ordner, in dem die <name of the solution>.sln-Datei Ihrer Lösung vorhanden ist.

3. Öffnen Sie Ihre Lösung.

4. Erstellen Sie Ihre Lösung neu.

Ali Sadri
quelle
7
Dies war die Option, die für mich funktioniert hat. Ich verwende jedoch VS2019 RC (16.0.0) und musste die .sou-Datei unter .vs \ {ProjectName} \ v16
Nick DeVore am
1
Ich habe es auch für mich aufgeräumt. Bei Verwendung von VS2017 befanden sich .sou-Dateien an mehreren Speicherorten - ".vs \ <Projektname> \ v15", ähnlich wie Nick feststellte, dass sich die .sou-Datei von VS2019 im Unterverzeichnis V16 befindet. Beachten Sie, dass ich auch ein "... V14" -Unterverzeichnis hatte, anscheinend von einem früheren VS2015, das ich vor dem Upgrade auf 2017 für dieselbe Lösung verwendet habe. Beide wurden bereinigt und alle Probleme gingen weg.
BRebey
1
* .suo nicht .sou ist die eigentliche Dateierweiterung
Mike Cheel
1
Gleiches gilt für Visual Studio 2019. Schließen Sie die Lösung, öffnen Sie die Lösung im Datei-Explorer, suchen Sie nach .suo-Dateien und löschen Sie alle. Öffnen Sie die Lösung erneut und es funktioniert wieder.
Yesman
Diese Option hat bei mir funktioniert, danke. Für VS2019 löschen Sie vs Ordner und öffnen Sie das Projekt
Ashi
21

Für diejenigen, die VS 2017 verwenden (ich bin derzeit in Version 15.3.4), sind hier die einfachen Schritte:

  1. Öffnen Sie Ihre Lösung im Windows Explorer und schließen Sie Visual Studio
  2. Wählen Sie im Explorer-Menü Ansicht und stellen Sie sicher, dass das Kontrollkästchen "Versteckte Elemente" aktiviert ist
  3. Navigieren Sie zum Unterordner .vs\[your solution name]\v15
  4. Löschen Sie die .suoDatei
  5. Starten Sie VS neu und erstellen Sie Ihre Lösung

Das hat es für mich behoben: F12 hat die eigentliche Quelldatei geöffnet, nicht die Version "aus Metadaten".

BCA
quelle
Wie in den Kommentaren an anderer Stelle erwähnt, ist das Verzeichnis v16, wenn Sie VS2019 ausführen.
Otis
10

Visual Studio hat häufig das Problem, eher zu Metadaten als zu Ihrem Projekt zu wechseln, wenn Sie den Ort verschieben, an dem Sie das Projekt erstellen, dh Sie haben möglicherweise mehrere Versionen, um die Dinge zu testen.

Löschen Sie einfach die Referenz und fügen Sie sie sofort wieder hinzu. Alles wird aussortiert.

Andrew
quelle
8

Die markierte Lösung funktioniert nicht immer. Sie müssen sicherstellen, dass die referenzierte Projekt-GUID in den Projektdateien die richtige GUID für das Projekt ist, auf das Sie verweisen möchten. Mit Visual Studio können sie unter bestimmten Umständen nicht mehr synchron sein. Sie können die Projekt-GUID mit einem Texteditor aus der Projektdatei abrufen. Wenn also Projekt A Referenzprojekt B. Projekt B.csproj im Texteditor öffnen, kopieren Sie die Projekt-GUID aus dem Tag. Öffnen Sie dann das Projekt A.csproj im Texteditor und stellen Sie sicher, dass Sie die richtige GUID verwenden. Suchen Sie in diesem Fall nach dem Projektnamen "B". Es sollte bei sein. Ersetzen Sie die GUID im Tag durch die richtige. Speichern und neu laden. Stellen Sie natürlich auch sicher, dass dateibasierte Verweise auf Ihre Projekte entfernt werden. Sie möchten nur Projektreferenzen.

Reich
quelle
6

Ich habe alle VS-Instanzen getötet, die SUO gelöscht, sln gestartet und es hat bei mir funktioniert ...

clement
quelle
Ich hatte einen unerwarteten Absturz von msbuild und danach traten verschiedene Probleme auf, darunter dieses. Dies löste das Problem. Seltsam.
Chris Lukic
3

Entfernen Sie die Referenz-DLL, Erstellen Sie (es werden Fehler angezeigt), fügen Sie die Referenz hinzu (Sie haben sie entfernt) und erstellen Sie sie erneut ... F12 für Ihre Funktion sollte dann funktionieren (für mich funktioniert).

Shinigami302
quelle
2

Ich habe in diesem Beitrag herausgefunden, wie ich mein Problem lösen kann. Vielleicht funktioniert es auch für einige von Ihnen.

Ich habe diese Schritte befolgt:

  1. Schließen Sie die Lösung.
  2. Löschen Sie die Intellisense-Datenbankdatei für die Lösung: .ncb
  3. Öffnen Sie die Lösung.
  4. Erstellen Sie die Lösung neu.

(Ich glaube, dass entweder Schritt 3 oder 4 die Intellisense-Datenbankdatei neu generiert, wenn sie fehlt.)

Intellisense, "Gehe zur Definition" und "Alle Referenzen finden" sollte wieder funktionieren.

Jiangping
quelle
2

In meinem Fall (mit Visual Studio Professional 2015), als ich den XAML-Designer deaktiviert hatte, funktionierte der F12 nicht mehr. Sobald ich die Änderungen rückgängig gemacht und Visual Studio neu gestartet habe, hat der F12 wieder funktioniert.

Überprüfte das Muster mehrmals, um es zu bestätigen, und postete es dann. Hoffe es hilft jemandem.

JuliOrdinary
quelle
1

Symptom:

Visual Studio 2010 Ultimate konnte bei Verwendung der Funktionen "Gehe zu Definition" oder "Gehe zu Deklaration" oder "Alle Verweise suchen" wiederholt keine Verweise auf Funktionen, #definiert, enthält usw. finden - seltsamerweise funktionierte Intellisense.

Fix:

  1. Schließen Sie Visual Studio
  2. Löschen Sie die SD-Datei der Lösung (benennen Sie sie um, wenn Sie konservativ sein möchten)
  3. Öffnen Sie Visual Studio erneut

Die SDF-Datei wird automatisch neu erstellt, indem die Include-Dateien in Ihrer Lösung analysiert werden

Neoheurist
quelle
2
@alestanis Vielleicht hat diese Antwort das Problem nicht für alle gelöst.
Nuzzolilo
@alestanis Ich habe das Problem im OP, aber die akzeptierte Antwort hat mir nicht geholfen ... Vielleicht sollten wir einfach alle Fragen löschen, die eine akzeptierte Antwort haben?
Carl
1

Für mich hat die GUID-Lösung nicht funktioniert und ich konnte meine .ncb-Datei nicht finden. (Oder vielleicht bin ich faul und habe nicht genau genug ausgesehen, aber das ist nicht wichtig.) Der Wiederaufbau und der Neustart von Visual Studio haben auch nicht geholfen.

Ich habe Visual Studio geschlossen und die DLLs und PDFs gelöscht, auf die oben in der Metadatendatei verwiesen wird, mit der mein Intellisense immer wieder verknüpft hat. In meinem Fall bedeutete dies, dass ich meine DLL und ihre PDF-Datei aus Utilities / bin / Release gelöscht habe. (Utilities ist der Name des DLL-Projekts, mit dem ich Probleme hatte.) Dann habe ich Visual Studio neu gestartet und die DLL neu erstellt, dann die gesamte Lösung. Keine Probleme mehr!

nicholeous
quelle
1

Habe gerade eine andere Ursache gefunden. Ich habe mein Webprojekt auf 4.0 aktualisiert, aber die Klassenbibliotheken bei 2.0 belassen. Zu diesem Zeitpunkt wurden alle Klassenbibliotheken in meiner Lösung als Dateireferenzen aus meinem Webprojekt behandelt. Könnte jemand anderem helfen ...

Tracyd
quelle
1

Ich hatte das gleiche Problem und einer der Kollegen gab mir die folgende Lösung und es funktionierte! Wenn keines der oben genannten Verfahren für Sie funktioniert,

  1. Entfernen Sie alle Referenzen und fügen Sie sie wieder hinzu (stellen Sie sicher, dass der Pfad korrekt ist).
  2. Zum Lösungseigenschaften und eine erneute Überprüfung des Projektabhängigkeiten aller Projekte. Stellen Sie sicher, dass das von Ihnen verwendete Projekt in dem Projekt, an dem Sie arbeiten, als abhängig hinzugefügt wird.
Chamodiadikaram
quelle
1

Ich habe alle vorgeschlagenen Schritte ausgeführt, aber nichts wurde geändert.
Klicken Sie schließlich mit der rechten Maustaste und fügen Sie das Referenzmenü auf der Registerkarte Projekt hinzu

  1. einfach das Referenzprojekt abwählen.
  2. Speichern Sie die Lösung.
  3. Wählen Sie das gleiche Projekt aus.
  4. Erstellen Sie die Lösung neu.

Problem sortiert. Hoffe das wird jemandem helfen.

Sansalk
quelle
1

Die folgenden Schritte haben bei mir funktioniert.

  1. Gehen Sie zur .csproj-Datei
  2. Öffnen Sie es im Editor. Gehen Sie zu der Zeile, in der sich die DLL befindet.<Reference Include="">
  3. Löschen Sie die Zeile

    <SpecificVersion>False</SpecificVersion> 
    or 
    <SpecificVersion>True</SpecificVersion>
    
Varun Verma
quelle
1

Nachdem Sie zuerst DLL-Dateien aus Visual Studio gelöscht und manuell aus dem Projektmappen-Explorer -> Website -> Hinzufügen -> Referenz wieder hinzugefügt und 32-Bit-Anwendungen in IIS aktiviert haben, wurde dies für mich behoben.

Marek Konsa
quelle
1

# 1

Aktivieren Sie "Ansicht - Objektbrowser". Wenn Sie mehr als eine Assembly mit demselben Namen sehen, wird dieser Fehler angezeigt.

Für uns war es ein Fehler in VS 2019:

Wenn Sie ASP.NET "Razor-Helfer" im App_CodeOrdner haben, interpretiert Visual Studio 2019 dies als eine andere Assembly mit demselben Namen, wodurch die tatsächliche Assembly ausgeblendet wird.

Es gibt keine Lösung dafür, außer diese Helfer in Teilansichten oder HTML-Helfer umzuschreiben (Sie müssen dies trotzdem tun, wenn Sie eine Migration auf .NET Core planen).

Sehen Sie sich diese Problemumgehung auf der MS-Website an und stimmen Sie den Fehler dort ab, damit MS ihn behebt

https://developercommunity.visualstudio.com/solutions/1008795/view.html (bitte positiv bewerten)

# 2

Ein weiterer Grund, warum dieselbe Assembly zweimal in den Objektbrowser geladen werden kann, besteht darin, dass Sie ein Unit-Test-Projekt haben, das den iis-express-Prozess startet und ihn nie ordnungsgemäß beendet.

Alex
quelle
0
  1. Klicken Sie auf das Menü der Website von VS.
  2. Referenz hinzufügen...
  3. Klicken Sie im Dialogfeld auf die Registerkarte Projekt
  4. Wählen Sie ddl
  5. Klicken Sie auf OK
Tatoba
quelle
0

In meinem Fall hatte ich mich erst kürzlich geändert

<mvcBuildViews>

auf "true" in der .csproj-Datei meiner Site (um Kompilierungsfehler in meinen Razor-Ansichtsdateien zu finden: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned + kompiliere + Fehler + auf + Rasiermesser + Syntax + Fehler + in + asp + net + web + Seite + 2 + ), und als ich dann baute, bekam ich Fehler aus meinem Verzeichnis / obj / Debug / meiner Site. Wenn Sie in einer dieser Dateien (die veraltet waren) mit der rechten Maustaste klicken und "Zur Definition gehen" auswählen, erhalte ich die Version [Metadaten].

Für mich hat keine der Lösungen hier funktioniert, da ich nicht von einer Datei ausgegangen bin, die sich tatsächlich in meinem Projekt befand. Wenn das gesamte Verzeichnis / obj / Debug / gelöscht wurde, sind die Fehler verschwunden, und aus jeder normalen Datei kann ich Go To Definition korrekt verwenden.

DaveD
quelle
0

Ich bin gerade auf VS 2013 auf dieses Problem gestoßen. Etwas, das ich nicht isolieren konnte (tat?), War das Ändern der GUID in der CSPROJ-Datei. Da die CSPROJ-Dateien in SVN eingecheckt sind, konnte ich die GUID auf meinem lokalen Entwickler nicht einfach ändern. Stattdessen habe ich die lokale Änderung jedes Mal, wenn dies geschah, durch SVN zurückgesetzt.

Zuerst musste ich das sich ändernde GUID-Problem lösen.

  1. Setzen Sie das CSPROJ auf die eingecheckte Version zurück.
  2. Öffnen Sie das CSPROJ über einen Texteditor, NICHT VS.
  3. Extrahieren Sie den Wert aus der ursprünglichen CSPROJ-Datei.

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

  4. Öffnen Sie die SLN-Datei über einen Texteditor, NICHT VS.

  5. Suchen Sie die Projektreferenz in der Lösung.

    Project ("{FAE12345-3210-1357-B3EB-00CA4F396F7C}") = "Some.Project", ".... \ Assemblys \ Some.Project \ Some.Project.csproj", "{B7654321-5321-4AAE- FE3D-ED20900088ED} "EndProject

  6. Die erste aufgeführte GUID ist die Lösungs-GUID. Für jedes Projekt, auf das in Ihrer SLN verwiesen wird, sollte dieser Wert beim ersten Argument wiederholt werden. Die GUID nach .csproj ist diejenige, die Sie durch die makellose GUID ersetzen möchten.

Dies sollte das erste Problem lösen, aber die Landung "Zur Definition gehen" in Metadaten ist nicht gelöst. In unserer SLN-Datei befindet sich ein Masterprojekt (unsere Website), daher sollte sein Eintrag in der SLN-Datei einen ProjectSection-Eintrag mit mehreren GUID-Werten enthalten. Hier ist ein Beispiel:

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

Beachten Sie, dass die fehlende GUID in dieser Sammlung die aus meinem ursprünglichen Projekt ist.

  1. Fügen Sie die fehlende GUID als letzten Eintrag zwischen ProjectSection und EndProjectSection hinzu. Das Format scheint zeilenweise zu sein und lautet {GUID} = {GUID}.
  2. Speicher die Datei.
  3. Öffnen Sie Ihre Lösung.
  4. Klicken Sie mit der rechten Maustaste auf eine Referenz im neu hinzugefügten Projekt und klicken Sie auf "Zur Definition".
gregsonian
quelle
0

Ich hatte einen Zirkelverweis zwischen den beiden beteiligten Projekten (was ein Nein-Nein ist). Musste meinen Code ein wenig umstrukturieren, um ihn zu lösen, da beide Projekte wirklich voneinander abhängig waren. Das Entfernen einer der Referenzen löste das Intellisense-Problem. Es war logisch fehlerhaft und ich hätte es ohne diesen Fehler wahrscheinlich nicht bemerkt!

kad81
quelle
0

Dieser hat für mich funktioniert:

  1. Klicken Sie mit der rechten Maustaste auf die DLL im Referenzordner Ihres Lösungs-Explorers
  2. DLL-Datei entfernen
  3. Klicken Sie dann mit der rechten Maustaste auf den Referenzordner
  4. Fügen Sie erneut einen Verweis auf die DLL-Datei hinzu
jemgaleon
quelle
0

Dies kann passieren, wenn Sie versuchen, in einem entladenen Projekt (nicht verfügbar) zur Definition zu springen. Klicken Sie mit der rechten Maustaste auf das entladene Projekt und wählen Sie "Projekt neu laden".

thecoolmacdude
quelle
-1

Die beste Vermutung ist, dass Sie keine Debug-Informationen haben. Möglicherweise haben Sie mehrere Kopien Ihrer Assembly auf der Festplatte, und die PDF-Datei ist nicht enthalten.

Suchen Sie in Ihren Projekten nach Ihren Baugruppennamen, löschen Sie sie alle und erstellen Sie sie neu.

Robert Kozak
quelle