"Ir para a definição" no Visual Studio exibe apenas os metadados

132

Estou trabalhando em um projeto da Web no Visual Studio 2008. Quando clico em F12 (ou clique com o botão direito do mouse e selecione Ir para a definição), o Visual Studio vai consistentemente para o arquivo de metadados em vez de ir para a fonte.

Alguns pontos:

  • Todo o código fonte é c #, não existe VB.Net
  • Todos os projetos estão na mesma solução
  • Tudo é uma referência de projeto em oposição a uma referência de arquivo (verificada e verificada duas vezes)
  • Eu tentei a abordagem Clean / Rebuild Solution (até o ponto de limpar o diretório Temp, o diretório Temporary ASP.NET Files, etc.).

Alguém mais viu esse comportamento e / ou sabe como corrigi-lo?

pfunk
fonte
Eu só tive esse problema em soluções mistas com vb.net ec # em diferentes projetos referenciados. Estranho: /
Bayard Randel
Para mim, uma reinicialização do Visual Studio corrigiu esse problema (em um projeto .net Core em uma solução de vários projetos).
Niico 03/09/19

Respostas:

59

Bem, outro desenvolvedor encontrou a resposta. O projeto específico com o qual tivemos um problema foi originalmente adicionado como uma referência de arquivo, depois removido e adicionado como uma Referência de Projeto. O Visual Studio, no entanto, manteve os dois no arquivo csproj do site, causando o problema. Ele entrou e editou manualmente o arquivo csproj para remover a referência do arquivo para o projeto do problema e tudo foi corrigido agora

pfunk
fonte
Esta é uma ótima informação para ter. Estou curioso para saber se vocês têm o SP1 instalado?
NotMe
bem, se eu pudesse encontrar essas informações em qualquer lugar da Web, eu diria a você. Estou executando o VS 2008 9.0.21022.8 RTM, mas eu vou ser amaldiçoado se eu posso encontrar em qualquer lugar se que corresponde ao VS 2008 SP1 ou originais
pfunk
Ótimo, obrigado - isso me ajuda. Deve ser ProjectReference no arquivo csproj, se aberto, usando o editor de texto / xml. Qualquer outro deve ser removido.
Victor Gelmutdinov
3
Isso também pode acontecer se o GUID no ProjectReference não corresponder ao valor ProjectGuid no projeto referenciado
David Gardiner
Obrigado! As questões de este tipo ainda persistem em MSVS
Alex
42

Isso acontece quando você não adiciona referência como projeto, mas aponta para uma dll ou exe usando a guia Procurar na caixa de diálogo Adicionar referência. Se você adicionar referência usando a guia Projetos, deverá ir diretamente ao código-fonte ao selecionar Ir para definição.

No entanto, se você instalar o ReSharper , irá para o código-fonte mesmo se tiver adicionado sua referência a uma dll / exe usando a guia Procurar.

Vadim
fonte
39

Parece que também precisa ser configurado no Resharper. Meu Visual Studio não navega para o código-fonte do .NET Framework até eu ativá-lo no Resharper.

Configurações de novo compartilhamento para permitir a navegação para fonte externa

Jeson Martajaya
fonte
1
Oi, funciona para mim. Resolveu esse problema. Usando a atualização 3 do VS2015, ReSharper 2016.1.2
Michal
25

1. feche sua solução.

2. exclua o <name of the solution>arquivo .suo oculto na pasta em que o <name of the solution>arquivo .sln da sua solução existe.

3. abra sua solução.

4. reconstrua sua solução.

Ali Sadri
fonte
7
Esta foi a opção que funcionou para mim. No entanto, estou usando o VS2019 RC (16.0.0) e tive que remover o arquivo .sou em .vs \ {ProjectName} \ v16 #
Nick DeVore #
1
Limpou para mim também. Usando o VS2017, os arquivos .sou estavam em vários locais - ".vs \ <ProjectName> \ v15", assim como Nick observou que o arquivo .sou do VS2019 está no subdiretório V16. Observe que eu também tinha um subdiretório "... V14", aparentemente de um VS2015 anterior que eu estava usando na mesma solução antes de atualizar para 2017. Limpei todos eles e todos os problemas desapareceram.
BRebey 26/04/19
1
* .suo não .sou é a extensão de arquivo real
Mike Cheel
1
O mesmo no Visual Studio 2019. Feche a solução, abra a solução no explorador de arquivos, procure por arquivos .suo e exclua todos. Reabra a solução e ela funcionará novamente.
yesman
Esta opção funcionou para mim, obrigado. Para VS2019, exclua a pasta vs e abra o projeto
Ashi
21

Para aqueles que usam o VS 2017 (estou na versão 15.3.4 no momento), aqui estão as etapas simples:

  1. Abra sua solução no Windows Explorer e feche o Visual Studio
  2. No menu do explorador, selecione Exibir e verifique se a caixa de seleção "Itens ocultos" está marcada
  3. Navegue até a subpasta .vs\[your solution name]\v15
  4. Excluir o .suoarquivo
  5. Reinicie o VS e construa sua solução

Isso foi corrigido para mim: o F12 abriu o arquivo de origem real, não a versão "dos metadados".

BCA
fonte
Conforme observado nos comentários em outros lugares, o diretório é v16 se você estiver executando o VS2019.
Otis
10

O Visual Studio geralmente sofre com o problema de acessar os metadados, e não o seu projeto, se você mudar o local onde está construindo o projeto, ou seja, você pode ter várias versões para testar as coisas.

Simplesmente exclua a referência e adicione-a imediatamente de volta e tudo será resolvido.

Andrew
fonte
8

A solução marcada nem sempre funciona. Você deve verificar se o GUID do projeto referenciado nos arquivos do projeto é o GUID correto para o projeto que você está tentando referenciar. O Visual Studio permite que eles fiquem fora de sincronia em algumas circunstâncias. Você pode obter o GUID do projeto no arquivo do projeto com um editor de texto. Portanto, se o projeto A, projeto de referência B. Abra o projeto B.csproj no editor de texto, copie o GUID do projeto da marca. Em seguida, abra o projeto A.csproj no editor de texto e verifique se você está usando o GUID correto. Procure o nome do projeto "B" neste caso. Deveria estar em. Substitua o GUID na tag pela correta. Salve e recarregue. Obviamente, também certifique-se de que as referências baseadas em arquivo para seus projetos sejam removidas. Você deseja apenas referências de projeto.

Rico
fonte
6

Eu matei todas as instâncias do VS, excluí o SUO, iniciei o sln e funcionou para mim ...

clemente
fonte
Tive um travamento inesperado do msbuild e vários problemas surgiram posteriormente, incluindo este. Isso resolveu o problema. Esquisito.
Chris Lukic
3

Remova a DLL de referência, Compile (obterá erros), ADICIONE A referência (você removeu) e compile novamente ... F12 em sua função deve funcionar (funcionou para mim).

Shinigami302
fonte
2

Eu descobri como resolver meu problema neste post , talvez também funcione para alguns de vocês.

Eu segui estes passos:

  1. Feche a solução.
  2. Exclua o arquivo de banco de dados intellisense da solução: .ncb
  3. Abra a solução.
  4. Reconstrua a solução.

(Acredito que as etapas 3 ou 4 regeneram o arquivo de banco de dados intellisense quando ele está ausente)

Intellisense, "vá para a definição" e "encontre todas as referências" devem estar funcionando novamente.

jiangping
fonte
2

No meu caso, (usando o Visual Studio Professional 2015), quando eu desabilitei o designer XAML, o F12 parou de funcionar. Assim que eu reverto as alterações e reinicio o Visual Studio, o F12 funcionou novamente.

Verificou o padrão várias vezes para confirmar e depois postou. Espero que ajude alguém.

JulyOrdinary
fonte
1

Sintoma:

O Visual Studio 2010 Ultimate falhou repetidamente em encontrar referências a funções, # define, inclui etc. ao usar os recursos "Ir para definição" ou "Ir para declaração" ou "Localizar todas as referências" - estranhamente, o Intellisense estava funcionando.

Consertar:

  1. Feche o Visual Studio
  2. Exclua (renomeie se quiser ser conservador) o arquivo .sdf da solução
  3. Reabrir o Visual Studio

O arquivo .sdf será reconstruído automaticamente analisando os arquivos de inclusão na sua solução

Neoheurista
fonte
2
@alestanis Talvez essa resposta não tenha resolvido o problema para todos.
Nuzzolilo 2/11
@alestanis Eu tenho o problema no OP, mas a resposta aceita não me ajudou .... Talvez devêssemos excluir todas as perguntas que tenham uma resposta aceita?
Carl
1

Para mim, a solução GUID não funcionou e não consegui encontrar meu arquivo .ncb. (Ou talvez eu seja preguiçoso e não pareça duro o suficiente, mas isso não é importante.) A reconstrução e a reinicialização do visual studio também não ajudaram.

O que fiz foi fechar o visual studio e excluir o arquivo .dll e .pdb que estava sendo referenciado na parte superior do arquivo Meta Data ao qual meu intellisense continuava vinculado. No meu caso, isso significava que eu excluí meu arquivo .dll e seu arquivo .pdb de Utilities / bin / Release. (Utilitários é o nome do projeto .dll com o qual estava tendo problemas.) Em seguida, reiniciei o visual studio e reconstruí o .dll e, em seguida, toda a solução. Sem mais problemas!

níquel
fonte
1

Acabei de encontrar outra causa. Atualizei meu projeto da Web para 4.0, mas deixei as bibliotecas de classes em 2.0. Nesse ponto, todas as bibliotecas de classes na minha solução foram tratadas como referências de arquivo do meu projeto da web. Pode ajudar alguém ...

Tracyd
fonte
1

Eu enfrentei o mesmo problema e um dos colegas me deu a seguinte solução e funcionou! Se nenhuma das opções acima funcionar para você,

  1. Remova todas as referências e adicione-as novamente (verifique se o caminho está correto)
  2. Vá para Propriedades da solução e verifique novamente as Dependências do projeto de todos os projetos. Verifique se o projeto que você usará foi adicionado como dependente no projeto em que está trabalhando.
chamodiadikaram
fonte
1

Eu fiz todas as etapas sugeridas, mas nada foi alterado;
finalmente, clique com o botão direito do mouse e adicione o menu de referência, guia projeto

  1. simplesmente desmarque o projeto de referência.
  2. salve a solução.
  3. selecione o mesmo projeto.
  4. Reconstrua a solução.

Problema classificado. Espero que isso ajude alguém.

sansalk
fonte
1

Os passos abaixo funcionaram para mim.

  1. Vá para o arquivo .csproj
  2. Abra-o no bloco de notas Vá para a linha onde a dll é referida.<Reference Include="">
  3. Excluir a linha

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

Depois de excluir os arquivos DLL do Visual Studio primeiro e adicioná-los manualmente novamente a partir do Gerenciador de Soluções -> Site -> Adicionar -> Referência e ativar Aplicativos de 32 bits no IIS, foi corrigido por mim.

Marek Konsa
fonte
1

# 1

Marque "View - Object Browser" e se você vir mais de um assembly com o mesmo nome - é por isso que está recebendo esse erro.

Para nós, foi um bug no VS 2019:

Se você tiver "auxiliares de barbear" do ASP.NET em App_Code pasta, o Visual Studio 2019 interpreta isso como um assembly diferente, mas com o mesmo nome, que oculta o assembly real.

Não há outra solução senão reescrever esses auxiliares em visualizações parciais ou auxiliares de HTML (você precisará fazer isso de qualquer maneira se planejar migrar para o .NET Core).

Veja esta solução alternativa no site da MS e atualize o bug para que a Microsoft o corrija

https://developercommunity.visualstudio.com/solutions/1008795/view.html (vote por favor)

# 2

Outro motivo pelo qual o mesmo assembly pode ser carregado duas vezes no navegador de objetos é se você tiver um projeto de teste de unidade que inicia o processo iis-express e nunca o mata adequadamente.

Alex
fonte
0
  1. clique no menu do site do VS.
  2. Adicionar referência ...
  3. Clique na guia projeto na caixa de diálogo
  4. Selecione ddl
  5. Clique no botão ok
Tatoba
fonte
0

No meu caso, eu havia mudado recentemente

<mvcBuildViews>

para "true" no arquivo .csproj do meu site (para encontrar erros de compilação nos meus arquivos de exibição do Razor: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned + compilar + erros + em + razor + sintaxe + erro + em + asp + net + web + página + 2 + ) e, quando eu construí, estava recebendo erros do meu diretório / obj / Debug / do meu site. Em qualquer um desses arquivos (desatualizados), clicar com o botão direito do mouse e selecionar "Ir para definição" me forneceria a versão [metadados].

Então, para mim, nenhuma das soluções aqui funcionou, porque eu não estava começando de um arquivo que estava realmente no meu projeto. Excluiu todo o diretório / obj / Debug /, os erros desapareceram e, de qualquer arquivo normal, posso usar corretamente Ir para a definição.

DaveD
fonte
0

Acabei de encontrar esse problema no VS 2013. Algo que eu não conseguia isolar estava alterando o GUID no arquivo CSPROJ. Como os arquivos CSPROJ são verificados no SVN, eu não poderia simplesmente mudar o GUID no meu desenvolvedor local. Em vez disso, eu estava constantemente revertendo o SVN a mudança local toda vez que acontecia.

Primeiro, tive que resolver o problema de mudança do GUID.

  1. Reverta o CSPROJ para a versão com check-in.
  2. Abra o CSPROJ através de um editor de texto, NÃO VS.
  3. Extraia o valor do arquivo CSPROJ original.

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

  4. Abra o arquivo SLN através de um editor de texto, NÃO VS.

  5. Localize a referência do projeto na solução.

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

  6. O primeiro GUID listado é o GUID da solução. Para cada projeto mencionado no seu SLN, você deve ver esse valor repetido no primeiro argumento. O GUID após o arquivo .csproj é o que você deseja substituir pelo GUID original.

Isso deve resolver o primeiro problema, mas o destino "Ir para a definição" nos metadados não é resolvido. Em nosso arquivo SLN, há um projeto mestre (nosso site), portanto, sua entrada no arquivo SLN deve conter uma entrada ProjectSection com vários valores GUID. Aqui está um exemplo:

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

Observe que o GUID ausente nesta coleção é o do meu projeto intocado.

  1. Adicione o GUID ausente como a última entrada entre ProjectSection e EndProjectSection. O formato parece ser por linha e é {GUID} = {GUID}.
  2. Salve o arquivo.
  3. Abra sua solução.
  4. Clique com o botão direito do mouse em uma referência no projeto recém-adicionado e em "Ir para definição".
gregsonian
fonte
0

Eu tinha uma referência circular entre os dois projetos envolvidos (que é um não-não). Tive que reestruturar um pouco meu código para resolvê-lo, pois os dois projetos eram verdadeiramente dependentes um do outro. A remoção de uma das referências resolveu o problema do intellisense. Era logicamente falho e eu provavelmente não teria notado sem esse erro!

kad81
fonte
0

Este funcionou para mim:

  1. Clique com o botão direito do mouse na DLL na pasta de referência no seu Solution Explorer
  2. Remover arquivo dll
  3. Clique com o botão direito do mouse na pasta Referência e, em seguida,
  4. Adicionar referência ao arquivo DLL novamente
jemgaleon
fonte
0

Isso pode acontecer se você estiver tentando pular para a definição em um projeto que foi descarregado (Indisponível). Clique com o botão direito do mouse no projeto descarregado e selecione "Recarregar Projeto".

thecoolmacdude
fonte
-1

O melhor palpite é que você não possui informações de depuração. Talvez você tenha várias cópias do seu assembly em disco e ele não possui o arquivo .pdb.

Faça uma pesquisa pelos nomes de montagem de seus projetos e exclua todos eles e reconstrua.

Robert Kozak
fonte