2009-06-02 3 views
1

데스크톱 응용 프로그램이 있습니다. Visual Studio를 사용하여 개발 중이므로 더 자주 응용 프로그램의 일부를 업데이트해야합니다. 매번 새로운 설치 프로그램을 배포하는 번거 로움을 피하기 위해 자주 업데이트되는 지원 기능을 별도의 프로젝트로 분할하여 DLL로 컴파일했습니다. 데스크톱 응용 프로그램은 이제 반사와 런타임에이 DLL을로드하고이 같은 인터페이스 정의와 공유 DLL에 따라 그 내부의 객체 인스턴스화Visual Studio 2005 : 다른 프로젝트에서 C# 코드를 디버깅 하시겠습니까?

Assembly a = Assembly.LoadFrom(supportDLLPath); 
ISupportModuleInterface obj = (ISupportModuleInterface)a.CreateInstance("SupportCode.SupportObject"); 
if (obj != null) 
{ 
    obj.OnTransferProgress += new FileTransferProgressHandler(obj_OnTransferProgress); 
    obj.OnTransferComplete += new EventHandler(uploader_OnTransferComplete); 
    obj.DoWork(packagePath) 
} 

그것은 작동 대부분의 시간을 잘하지만, 내가 필요를 문제를 디버깅하고 Visual Studio 디버거를 안정적으로 가져올 수는 없습니다. 때로는 DoWork에 들어갈 때와 같이 코드를 통해 F11을 누르면 시스템의 DLL 소스 코드가 자동으로 찾아져 표시됩니다. 그러나 이벤트가 발생하면 Visual Studio는 [외부 코드] 마커를 호출 스택에 표시하고 지원 프로젝트의 코드 내에서 이동할 수 없습니다.

누구든지이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 그렇다면 지원 프로젝트를 올바르게 디버깅 할 수 있습니까? 고맙습니다!

답변

1

어셈블리는 "모듈"창 (디버그 -> Windows -> 모듈, 또는 "Ctrl-D, M"누름)에 나열되어 있으며 기호가로드 된 기호와 함께 "심볼로드 됨" 당신이 기대하는 위치? (심볼을로드하려면 오른쪽 클릭하고 "심볼로드 ..."를 선택하십시오. 일치하는 심볼 파일을 찾을 수 없으면 "열기 ..."대화 상자가 나타납니다.

또한이 창에서 모듈이 두 번로드되지 않았는지 확인하고 어셈블리의 버전/타임 스탬프/위치가 예상 한 값인지 확인하십시오.

마지막으로 "도구 -> 옵션 -> 디버깅"에서 "내 코드 만"이 채워지는지 확인하고 선택을 해제하면 차이가 있는지 확인하십시오.

+0

성공! PDB 파일을 가리키고 프로젝트를 다시 시작한 후 가져 왔습니다. – jasonh

0

해체 할 수 있습니까? 그렇다면 내가 기억하는 것으로부터, pdb가 만들어 질 때 소스 코드가 있던 곳으로의 경로를 제공 할 것이다. 나는 NHibernate를 디버깅하기 위해 이것을해야만했으며 'pdb'파일이 생성되었을 때 정확한 경로에 소스 코드를 놓아야 만했다. 그 후에는 문제없이 소스 코드를 사용할 수 있습니다.

+0

불행히도, 아니요. [외부 코드]를 마우스 오른쪽 버튼으로 클릭하고 디스 어셈블리로 이동이 비활성화되었습니다. .pdb 파일이 Options-> Debugging-> Symbols 아래에있는 위치를 추가하려고 시도했지만 여전히 DLL의 내용을 인식하지 못합니다. – jasonh

관련 문제