문제

나는 여러 프로젝트로 구성된 VS (2008) 솔루션이 모두 동일한 네임 스페이스에있는 것은 아닙니다. 솔루션을 구축 할 때 최상위 프로젝트에서 사용하는 모든 DLL 최고 프로젝트 are copied into the topproject bin debug 폴더. 그러나 해당 .PDB 파일은 다른 프로젝트 중 일부에 대해서만 복사됩니다. 예를 들어 사용할 때 이것은 고통입니다 ndepend.

VS는 더 높은 레벨 bin 디버그 폴더로 복사 할 .pdb 파일을 어떻게 결정합니까? 다른 사람들도 어떻게 복사 할 수 있습니까?


편집하다:

참조는 다음과 같습니다. 모든 DLL은 PDB없이 중앙 위치로 복사됩니다. 최고 프로젝트 이 복사 된 DLL에 대한 언급이 있습니다. 그러나 DLL 자체는 PDB가 어디에 있는지 알고 있으며 (대부분) 디버그 폴더에 올바르게 복사됩니다.

도움이 되었습니까?

해결책

에서 MSDN:

프로그램 데이터베이스 (PDB) 파일은 프로그램의 디버그 구성을 증분시키는 디버깅 및 프로젝트 상태 정보를 보유합니다. /zi 또는 /zi 또는 /debug와 함께 Visual Basic /C# /JScript .NET 프로그램을 사용하여 C /C ++ 프로그램을 컴파일 할 때 PDB 파일이 작성됩니다.

따라서 여기에서 "문제"가 더 나은 단어가 부족하여 DLL 중 일부가 디버그 모드 (따라서 PDB를 방출 함)에 구축되고 있으며 일부는 릴리스 모드 (따라서 PDB를 방출하지 않음)입니다. . 이 경우 해결하기 쉽습니다. 각 프로젝트로 이동하여 빌드 설정을 업데이트하십시오. 명령 줄 옵션을 조정하지 않은 경우 기본 시나리오입니다.

그러나 그렇지 않으면 까다로워 질 것입니다. 어쩌면 당신은 모두 릴리스 또는 디버그 모드에있을 수 있습니다. 이제 각 프로젝트의 명령 줄 컴파일 옵션 (프로젝트 속성에 지정 됨)을 살펴 봐야합니다. 디버거를 원하는 경우 그에 따라 /디버그를 업데이트하거나 그렇지 않은 경우 제거하십시오.

편집에 대한 응답으로 편집

그렇습니다. DLLS는 PDB를 가지고 있으며 경로가 있다는 것을 "알고 있지만"너무 큰 의미는 아닙니다. 다른 사람들이 언급했듯이 DLL 만 주어진 디렉토리에 복사하면이 문제가 해결되지 않습니다. PDB도 필요합니다.

특정 "번들"유형 파일을 제외하고 Windows에서 개별 파일을 복사하는 것은 (이에 대한 Microsoft의 용어는 아니지만 "완전한 HTML 패키지"는 개념입니다)는 연관된 파일을 복사하지 않습니다. DLL은 "번들"방식으로 조립되지 않으므로 복사하면 PDB가 뒤처져 있습니다.

나는 당신이 가질 유일한 대답은 DLL을 해당 중앙 위치로 가져 오기위한 프로세스를 업데이트하고 PDB를 포함시키는 것입니다 ... 그래도 그에 대해 잘못 입증되고 싶습니다!

다른 팁

다른 게시물에서 말했듯이 컴파일러/손상 문제가있을 수 있습니다.

그러나 Will이 말했듯이 PDB 파일이 생성되고 있지만 원하는 위치에 표시되지 않으면 건축 후 단계를 만듭니다. 다음은 솔루션의 모든 프로젝트에 대해 제가 정의하는 사후 단계입니다. 모든 출력 파일이 공통 DIR로 복사되도록합니다.

proj 파일이 solutiondir projdir에 있으면 사후 구축 단계의 첫 번째 줄은 출력 파일을 solution bin release 또는 solution bin debug로 복사합니다. 두 번째 줄은 디버그 빌드 인 경우 PDB 파일을 복사합니다. 릴리스 빌드를 위해 PDB 파일을 복사하지 않습니다.

따라서 SolutionDir bin에는 이제 한 위치에 모든 출력 파일이 포함되어 있습니다.

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)

먼저 아무것도 가정하지 마십시오. 솔루션을 청소하고 디버그 모드로 재 구축 한 다음 모든 PDB 파일이 생성되는지 확인하십시오. 그렇지 않다면 그게 당신의 문제입니다.

그들이 만들어지고 모두 복사되지 않은 경우, PDB 파일을 원하는 위치에 수동으로 복사하는 게시물 빌드 이벤트를 만들어이 문제를 해결할 수 있습니다. 물론 이것은 단지 해결 방법 일뿐입니다.

내가 생각할 수있는 유일한 것은 솔루션 파일이 손상되었다는 것입니다. .SLN을 XML 파일로 열고 내용을 검사 할 수 있습니다. 예상대로 작동하는 프로젝트의 구성을 확인하고 그렇지 않은 프로젝트와 비교하십시오. 아무것도 보이지 않으면 프로젝트 수준에서 반복해야합니다. .csproj (또는 무엇이든) 프로젝트 파일과 비 작업 파일을 비교하십시오.


편집에 대한 응답으로 편집:

수동으로 물건을 복사하는 경우 PDB도 수동으로 복사하십시오. DLL은 PDB에 대해 아무것도 "알"해서는 안된다고 생각합니다. 목적지 디렉토리에 꽂아 커피 한 잔을 마시십시오. 안심하다.

솔루션을 청소하면 실제로 청소되는지 확인하십시오. 청소 후에도 빈 디버그 디렉토리에 파일이 걸려있는 파일을 남기는 것을 보았습니다. 모든 프로젝트에서 bin debug 디렉토리를 삭제하고 재구성하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top