소스 파일이 모듈이 빌드되었을 때와 다릅니다.


103

이것은 나를 미치게 만든다.

수정하려고하는 다소 큰 프로젝트가 있습니다. 를 입력했을 때 DbCommandVisual Studio가 구문 강조 표시를하지 않았고 System.Data.Common.

아무 것도 강조 표시되지 않았지만 프로젝트가 내 브라우저에서 제대로 실행되는 것 같았습니다. 그래서 디버거를 실행하여 제대로 작동하는지 확인했습니다.

강조 표시를하지 않은 수업이 호출 될 때마다 나는 "the source file is different from when the module was built"메시지를받습니다.

솔루션을 정리하고 여러 번 다시 빌드하고 tmp 파일을 삭제 한 다음 여기의 모든 지침을 따랐습니다. "소스 파일이 모듈이 빌드되었을 때와 다릅니다." , 웹 서버를 다시 시작했지만 소스 파일이 명확하지 않은 경우 여전히 다릅니다.

이 때문에 오늘 작성한 코드를 테스트 할 수 없습니다.

  • 방금 컴파일했을 때 소스가 바이너리와 어떻게 다를 수 있습니까?
  • 비주얼 스튜디오에 감각을 두드리는 방법이 있습니까? 아니면 뭔가 빠졌습니까?

그게 좀 많으면 미안 해요. 짧은 버전 : 프로그램을 컴파일 한 다음 디버깅을 시도하면 Visual Studio에서 방금 컴파일 한 소스 파일이 방금 빌드 한 모듈과 다르다고 알려줍니다. 왜 그렇게 생각하는지 알고 싶습니다
frustratedcoder

답변:


111

다른 소스가 진입 점이있는 소스 (static void Main) 인 콘솔 앱을 실행하는이 문제가 발생했습니다. bin 및 obj 디렉토리를 삭제하고 전체 재 빌드를 수행하면이 문제가 수정되는 것처럼 보였지만 코드를 변경할 때마다 다시 구식이됩니다.

내가 찾은 이유는 다음과 같습니다.

  1. "만 빌드 시작 프로젝트 및 실행에 대한 종속성"(도구-> 옵션-> 프로젝트 및 솔루션-> 빌드 및 실행)을 확인했습니다.
  2. 구성 관리자에서 내 시작 프로젝트에 "빌드"가 선택되지 않았습니다.

(# 2의 경우-> '디버그 / 릴리스'드롭 다운 목록 아래의 도구 모음을 통해 액세스 할 수 있습니다.)


7
구성 관리자 팁은 +1입니다. 나는 이것을 한 시간 동안 분류하려고 노력해 왔고 그게 다였습니다.
Nick Sarabyn 2013 년

TFS에 솔루션의 여러 분기가있었습니다. 체크 아웃 된 모든 분기에서 bin 및 obj 디렉토리를 삭제하면 문제가 해결되는 것처럼 보였습니다.
sparebytes 2014-08-22

내 경우, 나는 변경되었습니다 solution platforms에서 Any CPUMixed Platform실수로! 나는 그것을 다시 변경하고 다시 Any CPU작동합니다.
vaheeds

감사합니다. 솔루션> 속성> 구성 속성> 구성, 내 콘솔 앱 (동일한 sln에서 웹 앱에 대한 테스트를 실행)이 선택 취소되었습니다.
emery.noel

23

나는 단지이 같은 문제를 겪고 있었고, 내 프로젝트는 모두 동일한 솔루션에 있었으므로 Project to Project 참조를 사용하고 있었으므로 하나가 변경되면 다른 하나가 업데이트되어야했습니다. 그러나 그것은 사실이 아니었고, VS2010을 빌드하고, 다시 빌드하고, 닫고, 소스 컨트롤에서 새 복사본을 가져 왔습니다. 이 중 어느 것도 효과가 없었고 마침내 시도한 것은 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 각 프로젝트를 개별적으로 다시 빌드하는 것입니다. .dll 및 .pdb 파일을 업데이트하여 디버깅 할 수있었습니다.

여기서 문제는 dll 및 또는 pdb 파일이 동기화되지 않는다는 것입니다.


1
직접 언급하지 않았지만 "프로젝트 언로드"(다시로드)가 저에게 효과적입니다. 감사합니다.
javaLover

이것은 나를 위해 일했습니다.>이 중 어느 것도 효과가 없었습니다. 마침내 시도한 것은 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 각 프로젝트를 개별적으로 다시 빌드하는 것입니다. .dll 및 .pdb 파일을 업데이트하여 디버깅 할 수있었습니다.
Khachatur

프로젝트를 언로드 (다시로드)하고 웹 서버 (IIS)에 최신 비트를 게시하는 것이 저에게 효과적입니다.
Jason Tang

5

다음과 같이하세요

  1. DLL이 생성 된 프로젝트에서 bin 디렉토리를 삭제하면됩니다.
  2. 프로젝트를 다시 빌드하십시오.
  3. DLL을 참조하는 프로젝트에서 참조를 제거하십시오.
  4. 참조를 다시 포함하십시오.
  5. 즐겨.

4

이러한 답변 외에도 잘못된 경로로 인해 새 DLL을 이전 DLL로 교체하는 동안 동일한 문제가 발생했습니다. 이 오류가 계속 발생하면 DLL의 잘못된 경로를 참조하지 않을 수 있습니다. IIS 관리자로 이동하여 DLL을 사용하는 웹 사이트를 클릭하십시오. 오른쪽 창에서 고급 설정을 클릭하고 파일 탐색기의 실제 경로 폴더 경로로 이동 한 다음이 폴더를 사용하여 DLL을 대체하고 있는지 확인하십시오.


4

확인해야 할 사항 :

프로젝트 참조를 다시 확인 했습니까?

Visual Studio 시작 웹 서버가 아직 실행 중입니까? 시스템 트레이를 확인하고 톱니 바퀴 아이콘이있는 페이지를 찾습니다 (두 개 이상있을 수 있음).

대체 텍스트
(출처 : msdn.com )

마우스 오른쪽 버튼을 클릭하고 닫거나 종료합니다. 둘 이상있을 수 있습니다. 지금 변경 사항을 디버깅 할 수 있습니까?

디버그 버전을 실행하고 있지만 릴리스 버전 만 빌드 했습니까 (또는 그 반대의 경우)?

컴파일이 실제로 성공 했습니까? "오류가 있습니다. 그래도 계속 하시겠습니까?"를 클릭했습니다. 깨닫지 않고 몇 번 메시지를 보냅니다.


컴파일이 성공합니다. 저는 Visual Studio에 관해서는 약간 멍청합니다. 디버그 버전 또는 릴리스를 실행 중인지 어떻게 확인합니까?
frustratedcoder

1
@frustrated-나는 명백한 것을 제거하려고 노력했습니다. 릴리스인지 디버그인지 확인하려면 툴바의 "디버그"아이콘 옆에있는 드롭 다운을 확인하세요. "Debug"또는 "Release"가됩니다.
ChrisF

감사합니다. 디버그라고합니다. 그게되어야하는 건가요?
frustratedcoder

@frustrated-좋은 시작입니다;). 릴리스 코드를 "디버그"할 수 있지만 유용하지는 않지만 여기서는 관련이 없습니다. 이는 디버그 바이너리를 빌드하고 실행하고 있다는 의미입니다 (또는 적어도 그래야합니다). 좀 더 생각해야 할 것입니다. 실제로 문제를 보지 않으면 진단하기가 조금 어렵습니다.
ChrisF

"실제로 문제를 보지 않고는 진단하기가 조금 어렵다"라고 생각했습니다. 도움을 주셔서 감사합니다
frustratedcoder

3

웹 서비스의 경우 Visual Studio "브라우저에서보기"명령을 사용하여 문제가 발생할 수 있습니다. 그러면 서비스의 DLL 및 PDB 파일이 bin 및 obj 폴더에 저장됩니다. 클라이언트에서 웹 서비스로 들어갈 때 Visual Studio는 어떻게 든 bin (또는 obj) 폴더의 PDB를 사용하지만 프로젝트의 출력 빌드 폴더에있는 DLL을 사용합니다. 몇 가지 해결 방법이 있습니다.

  1. 웹 서비스 bin 및 obj 파일에서 DLL 및 PDB 파일을 삭제 해보십시오.
  2. Visual Studio에서 "브라우저에서보기"를 클릭 해보십시오.

이전에 소스 파일 불일치 오류가 발생한 경우 Visual Studio에서 블랙리스트에 파일 이름을 추가했을 수 있습니다. 솔루션 속성을 확인하십시오. 대화 상자의 왼쪽에서 "공통 속성-> 소스 파일 디버그"를 선택합니다. 웹 서비스 소스 파일이 "이 소스 파일을 찾지 않음"필드에 나타나면 해당 파일을 삭제하십시오.


2

방금이 문제가 발생했습니다.

위의 모든 것을 시도했지만 이것 만 효과가 있습니다.

  • 솔루션의 .pdb 파일을 삭제하십시오.
  • 문제가되는 .obj 파일을 삭제합니다 (동기화되지 않은 것으로보고되는 파일의 경우).

솔루션을 구축하십시오.

이것은 나를 위해 앞으로 나아가는 모든 빌드에 대한 문제를 해결했습니다.


여기서 .pdb 파일을 삭제하는 것이 핵심이라고 생각합니다. 이것은 다른 지점에서 오래된 .pdb 파일을 복사했기 때문에 발생했습니다.
Danzomida 2014 년

1

다음은 Visual Studio 2010에서 문제를 해결 한 방법입니다.

1) '솔루션 구성'옵션을 "디버그"에서 "릴리스"로 변경합니다.

2) 디버깅 시작

3) 디버깅을 중지하고 '솔루션 구성'옵션을 다시 "디버그"로 전환합니다.

이것은 나를 위해 일했습니다. 3 단계는 선택 사항입니다. "Release"로 변경하면 제대로 작동했지만 다시 변경하고 싶었습니다.


1

내 솔루션 :

새 솔루션 파일에 다른 솔루션의 기존 프로젝트를 포함했습니다.

기존 프로젝트가 다시 빌드 될 때 최종 출력이 새 솔루션의 출력 디렉터리에 저장된다는 사실을 알지 못했습니다. OLD 솔루션의 출력 디렉토리를 조사하도록 정의 된 링커 경로가 있습니다.

새 솔루션의 출력 디렉터리에서 검색하도록 프로젝트를 전환하면이 문제가 해결되었습니다.


1

이 문제가 있었고 콘솔 응용 프로그램을 Windows 응용 프로그램으로 실행 중이었습니다. 출력 유형을 다시 콘솔로 전환하면 문제가 해결되었습니다.


1

나는 같은 문제가 있었다. 이 문제를 해결하기 위해 "릴리스 모드"를 사용하여 VS2013에서 디버깅했습니다. 노드 js \ c ++ 애드온에서 작업하고 있기 때문에 어느 정도면 충분합니다.


1

오류를 일으키는 파일이있는 프로젝트를 언로드합니다.

프로젝트를 다시로드하십시오.

결정된



1

내 문제는 내 솔루션에 두 개의 프로젝트가 있다는 것입니다. 두 번째는 첫 번째 프로젝트를 호출하는 데 사용 된 테스트 프로젝트였습니다. bin 폴더의 릴리스 폴더에서 참조 경로를 선택했습니다.

따라서 첫 번째 프로젝트의 코드를 변경하고 다시 빌드 할 때마다 디버그 폴더의 dll이 업데이트되지만 호출하는 프로젝트가 릴리스 폴더를 가리키고 있었기 때문에 "소스 파일이 모듈이있을 때와 다릅니다. 지어졌다."

릴리스 폴더에서 주 프로젝트의 dll에 대한 참조를 삭제하고 디버그 폴더의 dll로 설정하면 문제가 해결되었습니다.


0

해결책 :-문제는 :-솔루션의 일부 프로젝트가 다른 프로젝트를 참조하면 때로는 일부 프로젝트의 dll이 자동으로 업데이트되지 않고 솔루션을 빌드 할 때마다 일부 프로젝트에는 이전 빌드 dll이 있지만 최신 dll

수동으로 이동하여 최신 빌드 프로젝트의 dll을 참조 된 프로젝트에 복사해야합니다.


0

저는 Visual Studio 2013을 사용하고 있었고 소스 제어하에 기존 프로젝트가있었습니다.
소스 제어에서 새 디렉토리로 새 사본을 다운로드했습니다.
새 복사본을 변경 한 후 빌드 할 때 문제의 오류가 발생했습니다.

내 솔루션 :
1) 열기 Documents\IISExpress\config\applicationhost.config
2) virtualDirectory디렉토리가있는 노드를 새 사본으로 업데이트 하고 저장하십시오.


0

내 문제는 프로젝트에 웹 서비스가 있고 빌드 경로를 변경했다는 것입니다.

기본 빌드 경로를 복원하면 문제가 해결되었습니다.


0

나는이 같은 문제가 있었고 여기에 게시 된 다른 답변의 대부분의 지침을 따랐으며 아무것도 작동하지 않는 것 같습니다.

결국 IIS를 열고 웹 응용 프로그램의 응용 프로그램 풀을 재활용했습니다. IIS 버전 8.5.9600이 있고 웹 응용 프로그램을 마우스 오른쪽 단추로 클릭 한 다음 배포> 재활용> 응용 프로그램 풀 재활용> 확인을 클릭했습니다.

그것은 그것을 고친 것처럼 보이며 이제 중단 점이 예상대로 적중됩니다. 나는 bin 및 obj 폴더를 삭제하는 것과 함께 이것을하는 것이 내 상황에 도움이되었다고 생각합니다.

행운을 빕니다!


0

나는 이것이 오래된 질문이라는 것을 알고 있지만 동일한 문제가 있었고 다른 사람에게 도움이 될 경우 여기에 게시하고 싶었습니다. 나는 새 컴퓨터를 얻었고 IT 부서는 이전 컴퓨터를 새 컴퓨터와 병합했습니다. TFS를 설정할 때 이전에 사용하던 것과 다른 로컬 경로를 추가 내부 드라이브에 매핑했습니다. 하드 드라이브의 병합 된 데이터에서 이전 경로가 여전히 존재하므로 빌드하고 실행할 수 있습니다. 내 IIS 경로도 이전 디렉토리를 가리키고있었습니다. IIS를 올바른 경로로 업데이트하면 제대로 디버그 할 수있었습니다. 나는 또한 좋은 측정을 위해 이전 디렉토리를 삭제했습니다.


0

나는 또한 그것을 경험했습니다. 프로젝트에서 obj 폴더를 연 다음 디버그 폴더를 열고 .pdb 파일을 삭제하면됩니다.


0

이 오류는 프로젝트의 일부가 아닌 소스 파일을 변경하려는 경우에도 발생합니다.

내 프로젝트 중 다른 프로젝트의 .dll에서 메서드를 디버깅하고 있었는데, Visual Studio는 .dll이 동일한 컴퓨터에서 빌드되었고 소스 경로를 알고 있었기 때문에 소스를 매우 유용하게로드했습니다. 참조 된 프로젝트를 다시 빌드하지 않는 한 이러한 파일을 변경해도 아무 작업도 수행되지 않습니다.


0
  1. 모든 중단 점을 삭제합니다.
  2. 재건.
  3. 끝난

0

Visual Studio 2015에서 C ++를 사용하여 the source file is different from when the module was built문제가 해결되었습니다.

  • Visual Studio를 다시 시작하십시오.

0

디버그-> 디버깅하지 않고 시작합니다.

이 옵션은 저에게 효과적이었습니다. 도움이 되었기를 바랍니다!


0

Matlab에서 mex ()를 사용하여 지정한 위치가 올바른지 확인하십시오 (Visual Studio에서 라이브러리를 마지막으로 컴파일 한 날짜로 수정 된 lib 및 obj 파일 포함).

그렇지 않은 경우 :

.lib 파일을 저장하는 모드에서 Visual Studio를 컴파일하고 있는지 확인하십시오.

  1. 속성-> 구성 속성-> 일반-> 구성 유형-> 정적 라이브러리

  2. 속성-> 구성 속성-> 일반-> 대상 확장자 = .lib (exe 대신)

출력 및 중간 디렉토리가 Matlab 디렉토리와 일치하는지 확인하십시오.

  1. 속성-> 구성 속성-> 일반-> 출력 디렉토리
  2. 속성-> 구성 속성-> 일반-> 중간 디렉터리

0

제 경우에는 @Eliott의 답변이 작동하지 않습니다. 이 문제를 해결하기 위해 내 결함있는 파일을 프로젝트에서 제외 / 포함 하고 솔루션을 정리 하고 다시 빌드 했습니다.

이러한 작업이 끝나면 마지막으로 수정 한 파일과 디버거가 복원됩니다.

도움이 되었기를 바랍니다.


0

때때로 Visual Studio에서 디버깅 할 때이 문제가 발생하지만 응용 프로그램이 IIS에서 제공 될 때 발생합니다 . (원래 개발자가이 프로젝트를 설정 한 방법과 관련된 몇 가지 복잡한 이유로이 형식으로 개발해야합니다.)

나는 때 파일을 변경하고 다시 그 수정 그것은 많은 시간을. 어리석게 들리 겠지만 한동안 변경하지 않았는데 왜 이상한 일이 일어나는지 확인하기 위해 일부 코드를 디버그하려고했는데이 페이지에서 여러 가지 작업을 시도했지만 변경만으로 해결되었습니다. 파일..

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