"Vai alla definizione" in Visual Studio visualizza solo i metadati


132

Sto lavorando a un progetto Web in Visual Studio 2008. Quando premo F12 (o faccio clic con il pulsante destro del mouse e seleziono Vai alla definizione) Visual Studio passa costantemente al file Metadata invece che al sorgente.

Alcuni punti:

  • Tutto il codice sorgente è C #, non esiste VB.Net
  • Tutti i progetti sono nella stessa soluzione
  • Tutto è un riferimento al progetto anziché un riferimento al file (controllato e ricontrollato)
  • Ho provato l'approccio Clean / Rebuild Solution (fino al punto di cancellare la directory Temp, la directory dei file temporanei ASP.NET, ecc.).

Qualcun altro ha visto questo comportamento e / o sa come risolverlo?


Ho riscontrato questo problema solo in soluzioni miste con vb.net e c # in diversi progetti di riferimento. Strano: /
Bayard Randel


Per me un riavvio di Visual Studio ha risolto questo problema (su un progetto .net Core all'interno di una soluzione multi-progetto).
Niico,

Risposte:


59

Bene, un altro sviluppatore ha trovato la risposta. Il progetto specifico con cui abbiamo riscontrato un problema è stato originariamente aggiunto come riferimento al file, quindi rimosso e aggiunto come riferimento al progetto. Visual Studio tuttavia, conservato entrambi nel file csproj per il sito Web, causando il problema. È entrato e ha modificato manualmente il file csproj per rimuovere il riferimento del file al progetto problema e ora tutto è stato risolto


Questa è un'ottima informazione da avere. Sono curioso di sapere se avete installato SP1?
NotMe,

bene, se potessi trovare tali informazioni ovunque sul Web, te lo direi. Sono in esecuzione VS 2008 9.0.21022.8 RTM, ma sarò dannato se riesco a trovare ovunque se ciò corrisponde a VS 2008 SP1 o originale
pfunk

Ottimo, grazie - questo mi aiuta. Dovrebbe essere ProjectReference nel file csproj se lo si apre usando l'editor text / xml. Qualsiasi altro dovrebbe essere rimosso.
Victor Gelmutdinov

3
Questo può accadere anche se il GUID in ProjectReference non corrisponde al valore ProjectGuid nel progetto di riferimento
David Gardiner,

Grazie! Problemi di questo tipo persistono ancora in MSVS
Alex

42

Succede quando non aggiungi riferimento come progetto ma punti a una dll o exe usando la scheda Sfoglia nella finestra di dialogo Aggiungi riferimento. Se aggiungi riferimenti utilizzando la scheda Progetti, dovresti andare direttamente al codice sorgente quando selezioni Vai a definizione.

Tuttavia, se installi ReSharper , passerai al codice sorgente anche se hai aggiunto il tuo riferimento a una dll / exe usando la scheda Sfoglia.


39

Sembra che debba essere configurato anche in Resharper. Visual Studio non accede al codice sorgente di .NET Framework finché non lo abilito in Resharper.

Impostazioni del resharper per consentire la navigazione verso una fonte esterna


1
Ciao, funziona per me. Ha risolto quel problema. Utilizzando VS2015 Update 3, ReSharper 2016.1.2
Michal,

25

1. chiudi la tua soluzione.

2. eliminare <name of the solution>il file .suo nascosto nella cartella in cui <name of the solution>esiste il file .sln della soluzione .

3. apri la tua soluzione.

4. ricostruisci la tua soluzione.


7
Questa è stata l'opzione che ha funzionato per me. Tuttavia, sto usando VS2019 RC (16.0.0) e ho dovuto rimuovere il file .sou in .vs \ {ProjectName} \ v16
Nick DeVore

1
L'ho pulito anche per me. Usando VS2017, i file .sou erano in più posizioni - ".vs \ <ProjectName> \ v15", proprio come Nick ha notato che il file .sou VS2019 è nel sottodirectory V16. Nota che avevo anche un sottodir "... V14", apparentemente da un precedente VS2015 che stavo usando sulla stessa soluzione prima di aggiornare al 2017. Li ho ripuliti entrambi e tutti i problemi sono scomparsi.
BRebey,

1
* .suo not .sou è l'estensione del file effettivo
Mike Cheel,

1
Lo stesso in Visual Studio 2019. Chiudi la soluzione, apri la soluzione in Esplora file, cerca i file .suo ed eliminali tutti. Riapri la soluzione e funziona di nuovo.
Sì,

Questa opzione ha funzionato per me, grazie. Per VS2019 elimina la cartella e apri il progetto
Ashi,

21

Per coloro che usano VS 2017 (sono alla versione 15.3.4 in questo momento) ecco i semplici passaggi:

  1. Apri la tua soluzione in Esplora risorse e chiudi Visual Studio
  2. Nel menu Explorer, seleziona Visualizza e assicurati che la casella di controllo "Elementi nascosti" sia selezionata
  3. Passa alla sottocartella .vs\[your solution name]\v15
  4. Elimina il .suofile
  5. Riavvia VS e crea la tua soluzione

Questo mi ha risolto: F12 ha aperto il file sorgente effettivo, non la versione "dai metadati".


Come notato nei commenti altrove, la directory è v16 se si esegue VS2019.
Otis,

10

Visual Studio soffre spesso del problema di andare ai metadati piuttosto che al progetto se si sposta la posizione in cui si sta costruendo il progetto, ad esempio è possibile che siano disponibili diverse versioni per testare le cose.

Basta eliminare il riferimento e aggiungerlo immediatamente indietro e tutto verrà risolto.


8

La soluzione contrassegnata non funziona sempre. È necessario assicurarsi che il GUID del progetto di riferimento nei file di progetto sia il GUID corretto per il progetto a cui si sta tentando di fare riferimento. Visual Studio consente loro di non sincronizzarsi in alcune circostanze. È possibile ottenere il GUID del progetto dal file di progetto con un editor di testo. Quindi se progetto A progetto di riferimento B. Aprire il progetto B.csproj nell'editor di testo, copiare il GUID del progetto dal tag. Quindi apri il progetto A.csproj nell'editor di testo e assicurati di utilizzare il GUID corretto. Cerca il nome del progetto "B" in questo caso. Dovrebbe essere a. Sostituisci il GUID nel tag con quello corretto. Salva e ricarica. Ovviamente assicurati anche di rimuovere i riferimenti basati su file ai tuoi progetti. Vuoi solo riferimenti a progetti.


6

Ho ucciso tutte le istanze VS, cancellato il SUO, lanciato sln e ha funzionato per me ...


Ho avuto un crash inaspettato di msbuild e in seguito sono sorti vari problemi, incluso questo. Questo ha risolto il problema. Strano.
Chris Lukic,

3

Rimuovere la dll di riferimento, Build (otterrà errori), AGGIUNGI IL riferimento (rimosso) quindi build di nuovo ... F12 sulla tua funzione dovrebbe quindi funzionare (ha funzionato per me).


2

Ho capito come risolvere il mio problema da questo post , forse funzionerà anche per alcuni di voi.

Ho seguito questi passaggi:

  1. Chiudi la soluzione
  2. Elimina il file di database intellisense per la soluzione: .ncb
  3. Apri la soluzione
  4. Ricostruisci la soluzione.

(Credo che il passaggio 3 o 4 rigenera il file di database intellisense quando manca)

Intellisense, "vai alla definizione" e "trova tutti i riferimenti" dovrebbero funzionare di nuovo.


2

Nel mio caso (usando Visual Studio Professional 2015), quando avevo disabilitato il designer XAML, l'F12 ha smesso di funzionare. Non appena ripristino le modifiche e riavvio Visual Studio, l'F12 ha funzionato di nuovo.

Controllato il motivo più volte per confermare e quindi pubblicato. Spero che aiuti qualcuno.


1

Sintomo:

Visual Studio 2010 Ultimate non riusciva a trovare ripetutamente riferimenti a funzioni, #define, include, ecc. Quando si utilizzavano le funzionalità "Vai alla definizione" o "Vai alla dichiarazione" o "Trova tutti i riferimenti" - stranamente Intellisense funzionava.

fix:

  1. Chiudi Visual Studio
  2. Elimina (rinomina se vuoi essere conservativo) il file .sdf della soluzione
  3. Riapri Visual Studio

Il file .sdf verrà automaticamente ricostruito analizzando i file di inclusione nella soluzione


2
@alestanis Forse quella risposta non ha risolto il problema per tutti.
nuzzolilo,

@alestanis Ho il problema nell'OP, ma la risposta accettata non mi ha aiutato .... Forse dovremmo semplicemente eliminare tutte le domande che hanno una risposta accettata?
Carl

1

Per me, la soluzione GUID non ha funzionato e non sono riuscito a trovare il mio file .ncb. (O forse sono pigro e non sembra abbastanza difficile, ma non è importante.) La ricostruzione e il riavvio di Visual Studio non ha aiutato neanche.

Quello che ho fatto è stato chiudere Visual Studio ed eliminare .dll e .pdb a cui si fa riferimento nella parte superiore del file Meta Data a cui il mio intellisense continuava a collegarsi. Nel mio caso significava che ho eliminato il mio .dll e il suo file .pdb da Utilities / bin / Release. (Utilità è il nome del progetto .dll con cui ho avuto problemi.) Quindi ho riavviato Visual Studio e ricostruito il .dll, quindi l'intera soluzione. Niente più problemi!


1

Ho appena trovato un'altra causa. Ho aggiornato il mio progetto Web a 4.0, ma ho lasciato le librerie di classe alla 2.0. A quel punto tutte le librerie di classe nella mia soluzione sono state trattate come riferimenti a file dal mio progetto web. Potrebbe aiutare qualcun altro ...


1

Ho affrontato lo stesso problema e uno dei colleghi mi ha dato la seguente soluzione e ha funzionato! Se nessuna delle opzioni precedenti funziona per te,

  1. Rimuovi tutti i riferimenti e aggiungili di nuovo (assicurati che il percorso sia corretto)
  2. Vai a Proprietà della soluzione e ricontrolla le dipendenze del progetto di tutti i progetti. Assicurati che il progetto che utilizzerai sia aggiunto come dipendente nel progetto su cui stai lavorando.

1

Ho fatto tutti i passaggi suggeriti, ma nulla è stato modificato, quindi alla
fine fare clic con il pulsante destro del mouse e aggiungere menu di riferimento, scheda progetto

  1. semplicemente deselezionato il progetto di riferimento.
  2. salva la soluzione.
  3. seleziona lo stesso progetto.
  4. Ricostruisci la soluzione.

Problema risolto. Spero che questo possa aiutare qualcuno.


1

Di seguito i passaggi hanno funzionato per me.

  1. Vai al file .csproj
  2. Aprilo nel Blocco note Vai alla riga in cui si riferisce la dll.<Reference Include="">
  3. Elimina la linea

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

1

Dopo aver eliminato prima i file dll da Visual Studio e averli aggiunti manualmente da Esplora soluzioni -> Sito Web -> Aggiungi -> Riferimento e abilitando le applicazioni a 32 bit in IIS, l'ho risolto per me.


1

1 #

Seleziona "Visualizza - Browser oggetti" e se vedi più di un assembly con lo stesso nome, ecco perché ricevi questo errore.

Per noi è stato un bug in VS 2019:

Se hai ASP.NET "Razor helper" in App_Code cartella Visual Studio 2019 lo interpreta come un assembly diverso ma con lo stesso nome, che nasconde l'assembly effettivo.

Non c'è altra soluzione se non riscrivere quegli helper in viste parziali o helper HTML (dovrai farlo comunque se prevedi di migrare a .NET Core).

Vedi questa soluzione alternativa sul sito di MS e per favore vota lì il bug in modo che MS lo risolva

https://developercommunity.visualstudio.com/solutions/1008795/view.html (per favore, vota)

2 #

Un altro motivo per cui lo stesso assembly può essere caricato due volte nel browser degli oggetti è se si dispone di un progetto unit-test che avvia il processo iis-express e non lo uccide mai correttamente.


0
  1. fare clic sul menu del sito Web da VS.
  2. Aggiungi riferimento ...
  3. Fare clic sulla scheda progetto dalla finestra di dialogo
  4. Seleziona ddl
  5. Fai clic sul pulsante OK

0

Nel mio caso, ero appena cambiato di recente

<mvcBuildViews>

su "true" nel file .csproj del mio sito (per trovare errori di compilazione nei miei file di visualizzazione Razor: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned + compila + errori + su + rasoio + sintassi + errore + in + asp + net + web + pagina + 2 + ), e quando ho costruito ho ricevuto errori dalla mia directory / obj / Debug / del mio sito. Da uno di quei file (che erano obsoleti), facendo clic con il tasto destro e selezionando "Vai alla definizione" mi darebbe la versione [dei metadati].

Quindi, per me, nessuna delle soluzioni qui ha funzionato, perché non stavo partendo da un file che era effettivamente nel mio progetto. Eliminata l'intera directory / obj / Debug /, gli errori sono scomparsi e da qualsiasi file normale posso usare correttamente Vai alla definizione.


0

Ho appena riscontrato questo problema su VS 2013. Qualcosa che non potevo isolare stava cambiando il GUID nel file CSPROJ. Poiché i file CSPROJ sono registrati in SVN, non ho potuto semplicemente cambiare il GUID sul mio sviluppatore locale. Invece, sono stato costantemente SVN a ripristinare il cambiamento locale ogni volta che è successo.

Innanzitutto, ho dovuto risolvere il problema con il GUID in evoluzione.

  1. Ripristina CSPROJ alla versione archiviata.
  2. Apri CSPROJ tramite un editor di testo, NON VS.
  3. Estrai il valore dal file CSPROJ incontaminato.

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

  4. Apri il file SLN tramite un editor di testo, NON VS.

  5. Individua il riferimento al progetto nella soluzione.

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

  6. Il primo GUID elencato è il GUID della soluzione. Per ogni progetto referenziato nel tuo SLN, dovresti vedere questo valore ripetuto al primo argomento. Il GUID che segue .csproj è quello che si desidera sostituire con il GUID originale.

Questo dovrebbe risolvere il primo problema, ma l'atterraggio "Vai alla definizione" nei metadati non è risolto. Nel nostro file SLN, c'è un progetto principale (il nostro sito Web), quindi la sua voce nel file SLN dovrebbe contenere una voce ProjectSection con più valori GUID. Ecco un esempio:

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

Notare che il GUID mancante in questa raccolta è quello del mio progetto originale.

  1. Aggiungi il GUID mancante come ultima voce tra ProjectSection ed EndProjectSection. Il formato sembra essere per riga ed è {GUID} = {GUID}.
  2. Salva il file.
  3. Apri la tua soluzione
  4. Fare clic con il tasto destro del mouse su un riferimento nel progetto appena aggiunto e "Vai a definizione".

0

Ho avuto un riferimento circolare tra i due progetti coinvolti (che è un no-no). Ho dovuto ristrutturare un po 'il mio codice per risolverlo dato che entrambi i progetti erano veramente dipendenti l'uno dall'altro. La rimozione di uno dei riferimenti ha risolto il problema dell'intellisense. Era logicamente difettoso e probabilmente non l'avrei notato senza questo errore!


0

Questo ha funzionato per me:

  1. Fare clic con il tasto destro del mouse sulla dll nella cartella di riferimento in Esplora soluzioni
  2. Rimuovi il file dll
  3. Fare clic con il tasto destro sulla cartella di riferimento, quindi
  4. Aggiungi di nuovo riferimento al file dll

0

Questo può accadere se stai tentando di passare alla definizione in un progetto che è stato scaricato (Non disponibile). Fare clic con il tasto destro del mouse sul progetto scaricato e selezionare "Ricarica progetto".


-1

La migliore ipotesi è che non hai informazioni di debug. Forse hai più copie del tuo assembly su disco e non contiene il file .pdb.

Cerca i nomi dei tuoi assembly dai tuoi progetti, eliminali tutti e ricostruisci.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.