Visual Studio의 "정의로 이동"은 메타 데이터 만 표시합니다.


132

Visual Studio 2008의 웹 프로젝트에서 작업하고 있습니다. F12를 누르거나 마우스 오른쪽 단추를 클릭하고 정의로 이동을 선택하면 Visual Studio가 소스로 이동하는 대신 메타 데이터 파일로 계속 이동합니다.

몇 가지 포인트 :

  • 모든 소스 코드는 C #이며 VB.Net은 없습니다.
  • 모든 프로젝트는 동일한 솔루션에 있습니다
  • 모든 것은 파일 참조가 아닌 프로젝트 참조입니다 (확인 및 이중 확인)
  • Clean / Rebuild Solution 접근 방식을 시도했습니다 (Temp 디렉토리, Temporary ASP.NET Files 디렉토리 등을 지울 때까지).

다른 사람이이 동작을 보거나 수정하는 방법을 알고 있습니까?


다른 참조 프로젝트의 vb.net 및 c #이 혼합 된 솔루션에서만이 문제가 발생했습니다. 이상한 : /
Bayard Randel 21:06에

내가 본 유일한 솔루션은 다음과 같습니다. http://johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html
NotMe

Visual Studio를 다시 시작하면이 문제가 해결되었습니다 (멀티 프로젝트 솔루션의 .net Core 프로젝트에서).
niico

답변:


59

다른 개발자가 답을 찾았습니다. 문제가 발생한 특정 프로젝트는 원래 파일 참조로 추가 된 다음 프로젝트 참조로 제거 및 추가되었습니다. 그러나 Visual Studio는 웹 사이트의 csproj 파일에 둘 다 보관하여 문제를 일으켰습니다. 그는 문제 프로젝트에 대한 파일 참조를 제거하기 위해 csproj 파일을 수동으로 편집하여 모두 수정했습니다.


이것은 좋은 정보입니다. SP1이 설치되어 있는지 궁금합니다.
NotMe

글쎄, 웹의 어느 곳에서나 그 정보를 찾을 수 있다면 나는 당신에게 말할 것입니다. 나는 VS 2008 9.0.21022.8 RTM을 실행하고,하지만 난 아무데도 찾을 수 있다면 나는 저주받을 것이다 경우 VS 2008 SP1 또는 원본과 그 대응
pfunk

감사합니다-도움이됩니다. text / xml 편집기를 사용하여 열 경우 csproj 파일의 ProjectReference 여야합니다. 다른 것은 제거해야합니다.
Victor Gelmutdinov

3
ProjectReference의 GUID가 참조 된 프로젝트의 ProjectGuid 값과 일치하지 않는 경우에도 발생할 수 있습니다.
David Gardiner

감사! 이러한 종류의 문제는 여전히 MSVS에서 지속됩니다
Alex

42

참조를 프로젝트로 추가하지 않고 참조 추가 대화 상자의 찾아보기 탭을 사용하여 dll 또는 exe를 가리킬 때 발생합니다. 프로젝트 탭을 사용하여 참조를 추가하면 정의로 이동을 선택할 때 소스 코드로 직접 이동해야합니다.

그러나 ReSharper 를 설치 하면 찾아보기 탭을 사용하여 dll / exe에 대한 참조를 추가 한 경우에도 소스 코드로 이동합니다.


39

Resharper에서도 설정 해야하는 것처럼 보입니다. Resharper에서 활성화 할 때까지 Visual Studio에서 .NET Framework 소스 코드를 탐색하지 않습니다.

외부 소스를 탐색 할 수있는 Resharper 설정


1
안녕하세요, 그것은 나를 위해 작동합니다. 그 문제를 해결했습니다. VS2015 업데이트 3 사용, ReSharper 2016.1.2
Michal

25

1. 솔루션을 닫습니다.

2.<name of the solution> 솔루션의 <name of the solution>.sln 파일이 있는 폴더에서 숨겨진 .suo 파일을 삭제하십시오 .

3. 솔루션을 엽니 다.

4. 솔루션을 다시 빌드하십시오.


7
이것은 나를 위해 일한 옵션이었습니다. 그러나, 나는 {프로젝트 이름} \ VS2019 RC (16.0.0)를 사용하고 .vs에서 .sou 파일을 제거해야 해요 \ V16을
닉 디 보어

1
나도 그것을 청소했다. VS2017을 사용하는 .sou 파일은 Nick이 VS2019 .sou 파일이 V16 하위 디렉토리에있는 것처럼 ".vs \ <ProjectName> \ v15"와 같은 여러 위치에있었습니다. 2017 년으로 업그레이드하기 전에 동일한 솔루션에서 사용했던 이전 VS2015의 "... V14"하위 디렉토리도 있습니다. 정리하면 모든 문제가 해결되었습니다.
BRebey

1
* .suo하지 .sou은 실제 파일의 확장자는
마이크 Cheel

1
Visual Studio 2019와 동일합니다. 솔루션을 닫고 파일 탐색기에서 솔루션을 열고 .suo 파일을 검색 한 후 모두 삭제하십시오. 솔루션을 다시 열면 다시 작동합니다.
yesman

이 옵션은 저에게 효과적이었습니다. 감사합니다. VS2019의 경우 vs 폴더를 삭제하고 프로젝트를 엽니 다
Ashi

21

VS 2017 (현재 버전 15.3.4에 있음)을 사용하는 사람들에게는 간단한 단계가 있습니다.

  1. Windows 탐색기에서 솔루션을 열고 Visual Studio를 닫습니다.
  2. 탐색기 메뉴에서보기를 선택하고 "숨겨진 항목"확인란이 표시되어 있는지 확인하십시오
  3. 하위 폴더로 이동 .vs\[your solution name]\v15
  4. .suo파일 삭제
  5. VS를 다시 시작하고 솔루션을 빌드하십시오.

F12는 "메타 데이터에서"버전이 아닌 실제 소스 파일을 열었습니다.


다른 곳에서 언급했듯이 VS2019를 실행하는 경우 디렉토리는 v16입니다.
Otis

10

Visual Studio는 프로젝트를 빌드하는 위치를 이동하는 경우 프로젝트 대신 메타 데이터로 이동하는 문제로 인해 어려움을 겪습니다. 즉, 여러 가지 버전으로 테스트 할 수 있습니다.

참조를 삭제하고 즉시 다시 추가하면 모든 것이 정렬됩니다.


8

표시된 해결책이 항상 작동하지는 않습니다. 프로젝트 파일에서 참조 된 프로젝트 GUID가 참조하려는 프로젝트의 올바른 GUID인지 확인해야합니다. Visual Studio에서는 일부 상황에서 동기화되지 않을 수 있습니다. 텍스트 편집기를 사용하여 프로젝트 파일에서 프로젝트 GUID를 얻을 수 있습니다. 따라서 프로젝트 A가 프로젝트 B를 참조하는 경우 텍스트 편집기에서 프로젝트 B.csproj를 열고 태그에서 프로젝트 GUID를 복사하십시오. 그런 다음 텍스트 편집기에서 프로젝트 A.csproj를 열고 올바른 GUID를 사용하고 있는지 확인하십시오. 이 경우 프로젝트 이름 "B"를 검색하십시오. 에 있어야합니다. 태그의 GUID를 올바른 것으로 교체하십시오. 저장하고 다시로드하십시오. 물론 프로젝트에 대한 파일 기반 참조가 제거되었는지 확인하십시오. 프로젝트 참조 만 원합니다.


6

나는 모든 VS 인스턴스를 죽이고, SUO를 삭제하고, sln을 시작하고 그것은 나를 위해 일했다 ...


예기치 않은 msbuild 충돌이 발생했으며이 문제를 포함하여 다양한 문제가 발생했습니다. 문제가 해결되었습니다. 기묘한.
Chris Lukic

3

참조 dll을 제거하고 빌드 (오류가 발생 함), 참조를 추가 (제거)하고 다시 빌드하십시오 ... 함수에서 F12가 작동해야합니다 (나를 위해 일했습니다).


2

이 게시물에서 내 문제를 해결하는 방법을 알아 냈습니다 . 어쩌면 일부 사용자에게도 도움이 될 것입니다.

나는 다음 단계를 따랐다.

  1. 솔루션을 닫습니다.
  2. 솔루션의 인텔리전스 데이터베이스 파일을 삭제하십시오. .ncb
  3. 솔루션을 엽니 다.
  4. 솔루션을 다시 빌드하십시오.

(3 단계 또는 4 단계에서 인텔리전스 데이터베이스 파일이 누락 된 경우 재생성한다고 생각합니다)

Intellisense, "정의로 이동"및 "모든 참조 찾기"가 다시 작동해야합니다.


2

필자의 경우 (Visual Studio Professional 2015 사용) XAML 디자이너를 비활성화했을 때 F12가 작동을 멈췄습니다. 변경 사항을 되돌리고 Visual Studio를 다시 시작하자마자 F12가 다시 작동했습니다.

패턴을 여러 번 확인하여 확인한 후 게시했습니다. 그것이 누군가를 돕기를 바랍니다.


1

징후:

"정의로 이동"또는 "신고로 이동"또는 "모든 참조 찾기"기능을 사용할 때 Visual Studio 2010 Ultimate에서 함수, #defines, include 등에 대한 참조를 반복적으로 찾지 못했습니다. 이상하게도 Intellisense가 작동했습니다.

고치다:

  1. Visual Studio 닫기
  2. 솔루션 .sdf 파일 삭제 (보존하려는 경우 이름 바꾸기)
  3. Visual Studio를 다시 엽니 다

.sdf 파일은 솔루션의 포함 파일을 구문 분석하여 자동으로 다시 작성됩니다.


2
@alestanis 아마도 그 대답이 모든 사람의 문제를 해결하지는 못했을 것입니다.
nuzzolilo

@alestanis OP에 문제가 있지만 허용 된 답변이 도움이되지 않았습니다 ... 아마도 허용 된 답변이있는 모든 질문을 삭제해야합니까?
Carl

1

저에게 GUID 솔루션이 작동하지 않아서 .ncb 파일을 찾을 수 없었습니다. (또는 어쩌면 게으르고 힘들어 보이지는 않지만 중요하지 않습니다.) Visual Studio를 다시 빌드하고 다시 시작해도 도움이되지 않았습니다.

내가 한 것은 Visual Studio를 닫고 내 인텔리전스가 계속 연결 한 메타 데이터 파일의 맨 위에 참조되는 .dll 및 .pdb를 삭제하는 것입니다. 필자의 경우 .dll을 삭제했으며 Utilities / bin / Release에서 .pdb 파일입니다. (유틸리티는 문제가 발생한 .dll 프로젝트의 이름입니다.) 그런 다음 Visual Studio를 다시 시작하고 .dll을 다시 빌드 한 다음 전체 솔루션을 다시 작성했습니다. 더 이상 문제가 없습니다!


1

다른 원인을 찾았습니다. 웹 프로젝트를 4.0으로 업그레이드했지만 클래스 라이브러리는 2.0으로 두었습니다. 그 시점에서 솔루션의 모든 클래스 라이브러리는 웹 프로젝트의 파일 참조로 취급되었습니다. 다른 사람을 도울 수 있습니다 ...


1

나는 같은 문제에 직면했고 동료 중 하나가 다음과 같은 해결책을 주었다. 위의 어느 것도 당신에게 효과가 없다면,

  1. 모든 참조를 제거하고 다시 추가하십시오 (경로가 올바른지 확인하십시오).
  2. 솔루션 속성으로 이동하여 모든 프로젝트의 프로젝트 종속성을 다시 확인하십시오. 사용할 프로젝트가 작업중인 프로젝트에 종속 항목으로 추가되어 있는지 확인하십시오.

1

모든 제안 단계를 수행했지만 아무것도 변경되지 않았습니다.
마지막 마우스 오른쪽 버튼을 클릭하고 참조 메뉴, 프로젝트 탭 추가

  1. 단순히 참조 프로젝트를 선택 해제했습니다.
  2. 솔루션을 저장하십시오.
  3. 동일한 프로젝트를 선택하십시오.
  4. 솔루션을 다시 빌드하십시오.

문제가 정렬되었습니다. 이것이 도움이되기를 바랍니다.


1

아래 단계는 나를 위해 일했습니다.

  1. .csproj 파일로 이동
  2. 메모장에서 열기 dll이 참조되는 행으로 이동하십시오.<Reference Include="">
  3. 줄을 삭제

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

1

Visual Studio에서 dll 파일을 먼저 삭제하고 솔루션 탐색기-> 웹 사이트-> 추가-> 참조에서 수동으로 다시 추가하고 IIS에서 32 비트 응용 프로그램을 활성화하면 문제가 해결되었습니다.


1

#1

"보기-개체 브라우저"를 확인하고 같은 이름의 어셈블리가 두 개 이상있는 경우이 오류가 발생합니다.

우리에게는 VS 2019의 버그였습니다.

App_Code폴더에 ASP.NET "Razor helpers"가있는 경우 Visual Studio 2019는이를 다른 어셈블리로 해석하지만 이름은 같지만 실제 어셈블리를 숨 깁니다.

헬퍼를 부분 뷰 또는 HTML 헬퍼에 다시 쓰는 것 외에는 다른 해결책이 없습니다 (어쨌든 .NET Core로 마이그레이션하려는 경우 그렇게해야합니다).

MS 사이트에서이 대안을 확인하고 버그를 수정하여 MS가 수정하십시오.

https://developercommunity.visualstudio.com/solutions/1008795/view.html (공개하십시오)

# 2

객체 브라우저에서 동일한 어셈블리를 두 번로드 할 수있는 또 다른 이유는 iis-express 프로세스를 시작하고 제대로 종료하지 않는 단위 테스트 프로젝트가있는 경우입니다.


0
  1. VS에서 웹 사이트 메뉴를 클릭하십시오.
  2. 참조 추가 ...
  3. 대화 상자에서 프로젝트 탭을 클릭하십시오
  4. ddl을 선택하십시오
  5. 확인 버튼을 클릭하십시오

0

제 경우에는 최근에 방금 바꿨습니다

<mvcBuildViews>

내 사이트의 .csproj 파일에서 "true"로 설정 (내 Razor보기 파일에서 컴파일 오류를 찾으려면 http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned + compile + errors + on + razor + syntax + error + in + asp + net + web + page + 2 + ) 그리고 내가 빌드 할 때 내 사이트의 / obj / Debug / 디렉토리 내에서 오류가 발생했습니다. 이 파일 중 오래된 파일에서 마우스 오른쪽 버튼을 클릭하고 "정의로 이동"을 선택하면 [메타 데이터] 버전이 표시됩니다.

그래서 실제로 내 프로젝트에있는 파일에서 시작하지 않았기 때문에 여기에서 해결책 중 어느 것도 효과가 없었습니다. 전체 / obj / Debug / 디렉토리를 삭제하면 오류가 사라지고 일반 파일에서 Go To Definition을 올바르게 사용할 수 있습니다.


0

방금 VS 2013 에서이 문제에 부딪 쳤습니다. 분리 할 수 ​​없었던 것이 CSPROJ 파일의 GUID를 변경하는 것이 었습니다. CSPROJ 파일이 SVN에 체크인되었으므로 로컬 개발자의 GUID를 간단하게 변경할 수 없었습니다. 대신, 나는 항상 SVN이 발생할 때마다 로컬 변경 사항을 되돌 렸습니다.

먼저, 변화하는 GUID 문제를 해결해야했습니다.

  1. CSPROJ를 체크인 버전으로 되돌립니다.
  2. VS가 아닌 텍스트 편집기를 통해 CSPROJ를 엽니 다.
  3. 깨끗한 CSPROJ 파일에서 값을 추출하십시오.

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

  4. VS가 아닌 텍스트 편집기를 통해 SLN 파일을 엽니 다.

  5. 솔루션에서 프로젝트 참조를 찾으십시오.

    Project ( "{FAE12345-3210-1357-B3EB-00CA4F396F7C}") = "Some.Project", ".... \ assemblies \ Some.Project \ Some.Project.csproj", "{B7654321-5321-4AAE- FE3D-ED20900088ED} "프로젝트 종료

  6. 나열된 첫 번째 GUID는 솔루션 GUID입니다. SLN에서 참조 된 모든 프로젝트에 대해 첫 번째 인수에서이 값이 반복되는 것을 볼 수 있습니다. .csproj 다음에 오는 GUID는 원래 GUID로 바꾸려는 GUID입니다.

첫 번째 문제는 해결해야하지만 메타 데이터의 "정의로 이동"착륙은 해결되지 않습니다. SLN 파일에는 마스터 프로젝트 (웹 사이트)가 있으므로 SLN 파일의 항목에는 여러 GUID 값이있는 ProjectSection 항목이 포함되어야합니다. 예를 들면 다음과 같습니다.

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

이 컬렉션에서 빠진 GUID는 제 자신의 프로젝트에서 나온 것입니다.

  1. 누락 된 GUID를 ProjectSection과 EndProjectSection 사이의 마지막 항목으로 추가하십시오. 형식은 한 줄에 표시되며 {GUID} = {GUID}입니다.
  2. 파일을 저장하십시오.
  3. 솔루션을여십시오.
  4. 새로 추가 된 프로젝트에서 참조를 마우스 오른쪽 단추로 클릭하고 "정의로 이동"

0

나는 관련된 두 프로젝트 사이에 순환 참조를 가졌습니다 (아니요). 두 프로젝트가 실제로 서로 의존했기 때문에 코드를 해결하기 위해 코드를 약간 재구성해야했습니다. 참조 중 하나를 제거하면 인텔리전스 문제가 해결되었습니다. 논리적으로 결함이 있었으며 아마도이 오류가 없으면 눈에 띄지 않았을 것입니다!


0

이것은 나를 위해 일했다 :

  1. 솔루션 탐색기의 참조 폴더에서 dll을 마우스 오른쪽 버튼으로 클릭하십시오.
  2. dll 파일 제거
  3. Reference 폴더를 마우스 오른쪽 버튼으로 클릭 한 다음
  4. dll 파일에 대한 참조를 다시 추가하십시오

0

언로드 된 (사용할 수없는) 프로젝트에서 정의로 이동하려고 할 때 발생할 수 있습니다. 언로드 된 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "프로젝트 재로드"를 선택하십시오.


-1

가장 좋은 추측은 디버그 정보가 없다는 것입니다. 디스크에 여러 개의 어셈블리 사본이 있고 .pdb 파일이 없을 수도 있습니다.

프로젝트에서 어셈블리 이름을 검색하고 모두 삭제하고 다시 빌드하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.