1

Visual Studio를 처음 사용하고 C#을 처음 사용합니다. Visual Studio 2017에서 Transactional Messaging이라는 C# Windows 서비스를 작성합니다.이 서비스는 Outbound Messaging이라는 프로젝트에 종속되어 있습니다. 내가 디버깅을 시작하고 아웃 바운드 메시징 파일에 중단 점을 추가하려고 할 때, 내가 무엇을 말할 수에서C# Visual Studio Service 디버깅 "현재 중단 점에 도달하지 않습니다.이 문서에 심볼이로드되지 않았습니다."

"The breakpoint will not currently be hit. No Symbols have been loaded for this document"

를 얻을 VS가의 PDB 파일을로드 할 수 만없는 : log4net.dll, Castle.Windsor.dll, 및 Castle.Core.dll. 트랜잭션 메시징 서비스의 파일에 중단 점을 추가하는 것과 관련하여이 문제가 없습니다. 나는 행동 패턴이나 영구적 인 수정을 식별 할 수 없었기 때문에이 시점에서 오류는 무작위로 보인다. 1 분 나는 픽스를 발견했다고 생각하는데, 그 픽스를 같은 날 나중에 사용하려고하면 나중에 운이 없다. 나는 pdb 파일을 캐싱 할 수있는 것처럼 보이기 때문에 예기치 않게 내 컴퓨터를 닫는 최근의 정전에 대해 의심 스럽지만 오래 걸릴 것이라고 말했습니다.

단계 나는 서비스를 디버깅하기 위해 수행 : Windows 서비스 애플릿을 통해

  1. 정지 트랜잭션 메시징 서비스를
  2. 제거 트랜잭션 메시징 서비스 디버그 폴더에
  3. 청소 트랜잭션 메시징 솔루션을 installutil /u TransactionalMessaging.exe를 사용하여 VS 명령 라인을 통해 Visual Studio에서
  4. Visual Studio에서 트랜잭션 메시징 솔루션을 작성하십시오. 솔루션 탐색기에서 솔루션의 각 요소를 마우스 오른쪽 단추로 클릭하고 t 개별적으로)
  5. 이 프로세스에 연결> Windows 서비스 애플릿을 통해 디버그 폴더
  6. 시작 트랜잭션 메시징 서비스에서 VS에서
  7. , 디버그를 installutil TransactionalMessaging.exe를 사용하여 VS 명령 라인을 통해 거래 메시징 서비스를 설치> 트랜잭션 메시징
  8. 위의 오류가 발생하는 아웃 바운드 메시징 서비스의 파일에 중단 점을 추가하십시오. 수동으로 log4net.dll, Castle.Windsor.dll 및 성 각 모듈의 심볼 (PDB 파일을로드> 모듈을

    1. 디버그> 윈도우 :

    단계는이 오류를 해결하기 위해 시도했습니다. Core.dll는 picture of modules

  9. 가 완전히>
  10. 프로젝트> 프로젝트 속성 위의 2 단계와 3 단계 사이의 빈과 OBJ 폴더를 삭제 구축) 찾을 수 없습니다> 고급> 디버깅 정보 : 트랜잭션 메시징 및 아웃 바운드 메시징 모두 전체()

VS, C# 또는 코드베이스에 대한 이해가 부족한지는 확실하지 않습니다. 어떤 통찰력이라도 고맙게 생각합니다. 저는 인터넷 검색을 거치지 않고 최후의 수단으로 새로운 질문을 게시합니다.

+0

로컬 컴퓨터에서 dll 파일이나 pdb 파일을 찾을 수 있습니까? TOOLS-> Options-> Debugging-> Symbols에서 Symbols Server를 활성화하십시오. 또한이 어셈블리가 Nuget 패키지에서 설치되었는지 여부는 관리합니까? 그렇다면 정확하거나 일치하는 버전을 설치하는지 확인하십시오. –

답변

2

나는 보통 내가 프로젝트 (A)에 코드를 변경하고 컴파일 깜빡 한이 메시지가 표시됩니다.
프로젝트 A를 참조하는 다른 프로젝트 B는 화면에 A라는 최신 소스 코드를 가지고 있지만 A의 오래된 어셈블리로 시작되었습니다. 따라서 코드가 어셈블리와 일치하지 않으므로 중단 점을 사용할 수 없습니다.

내 의견으로는 엉덩이에 버그와 고통이 있지만, 디자인에 따라 (필자가 물어 본 것) 한 가지 더 있습니다 :
Visual Studio 2015부터 프로젝트 B의 컴파일 작업이 수행됩니다. 이 예에서는 어셈블리 A 인 수정 된 참조 된 어셈블리를 자동으로 포함하지 않습니다. B의 어딘가에 대신 A가 사용됩니다. 위와 같은 결과 : 최신 코드이지만 오래된 어셈블리. 컴파일하는 대신 다시 빌드해야합니다!
디버그 모드로 컴파일 할 필요가 :

다른 한 가지 더있다. 릴리스 모드에서 기본 프로젝트 설정은 예를 들어 VS 2008에서와 같이 적절한 디버깅을 허용하지 않습니다.

1

디버거를 연결할 권한이 없으므로 연결할 수 없습니다. 이 권한은 레지스트리의 특정 비트 만 뒤집을 수 있습니다.

See my earlier Answer:

Also start VisualStudio as Administrator and allow, that a process can automatically be debugged by a different user:

reg add "HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}" /v AppIDFlags /t REG_DWORD /d 8 /f 
+0

어디에서이 명령을 입력합니까? 비주얼 스튜디오 명령 프롬프트에 디버그 폴더에 행운을 넣으려고 시도했습니다 – mel

+0

@mel, CMD에서 reg 명령 줄을 실행 하시겠습니까? –

+0

예, CMD-shell에 입력해야합니다. regedit.exe를 사용하여 수동으로 키를 검색 할 수도 있습니다. – wotanii