Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

ssindex.cmd 실행 시 '...[tfs_collection_url]...' not found in srcsrv.ini 오류 발생

소스 서버가 뭔지에 대해서는 예전에 설명해 드린 적이 있지요? ^^

TFS Team Build + Source Server = 소스 코드 디버깅
; https://www.sysnet.pe.kr/2/0/600

그런데 ssindex.cmd를 실행하는 과정에서 다음과 같은 오류가 발생하는 경우가 있습니다.

D:\Sources>perl -w -x "%ProgramFiles(x86)%\Debugging Tools for Windows (x86)\srcsrv\ssindex.cmd" -SYSTEM=TFS -SYMBOLS="d:\sources\bin\release" -SOURCE=d:\sources
--------------------------------------------------------------------------------

ssindex.cmd [STATUS] : Server ini file: C:\Program Files (x86)\Debugging Tools for Windows (x86)\srcsrv\srcsrv.ini
ssindex.cmd [STATUS] : Source root    : d:\sources"
ssindex.cmd [STATUS] : Symbols root   : d:\sources\bin\Release
ssindex.cmd [STATUS] : Control system : TFS
ssindex.cmd [STATUS] : TFS program name: tf.exe
ssindex.cmd [STATUS] : TFS Label      : <N/A>
ssindex.cmd [STATUS] : Old path root  : <N/A>
ssindex.cmd [STATUS] : New path root  : <N/A>
--------------------------------------------------------------------------------

ssindex.cmd [STATUS] : Running... this will take some time...
ssindex.cmd [STATUS] : http://localhost:8083/tfs/defaultcollection not found in srcsrv.ini. Skipping all files in database.

이 오류가 발생하는 원인은, srcsrv.ini에 기재한 "MYSERVER" 항목의 값과 ssindex.cmd 내부에서 호출하는 tfs.pm의 반환값이 다르기 때문입니다. 예를 들어, srcsrv.ini에는 다음과 같이 기재하고,

[variables]
MYSERVER=https://guesttfs3.testhvpc.com:8084

tfs.pm은 내부적으로 다시 "tf.exe workfold"의 반환값으로 TFS 서버의 주소를 알아내는데,

D:\Sources>tf.exe workfold
===============================================================================
Workspace : TESTPC (TestUser)
Collection: https://localhost:8080/tfs/defaultcollection
 $/TestProgram: D:\Sources

보시는 바와 같이 "Collection"의 값과 "MYSERVER" 항목의 값이 다릅니다.

이런 경우, 문제 해결책은 MYSERVER의 값을 바꾸거나 "tf.exe workfold"가 MYSERVER에 기재한 값과 동일한 내용을 반환하도록 수정해야 합니다. 가장 편한 것은 MYSERVER의 값을 바꾸면 좋겠으나, 위와 같은 경우에는 "Collection:"의 반환값 주소가 "localhost"이기 때문에 소스 서버 접근을 외부에서 할 수 없다는 것이 되므로 "tf.exe workfold"의 결과값을 바꾸는 쪽을 선택해야 합니다.

"tf workfold"는 실행시 그 값을 다음의 폴더에 있는 파일로부터 가져와서 출력하는 역할만 합니다.

%LOCALAPPDATA%\Microsoft\Team Foundation\5.0\Cache

위의 폴더에 있는 적절한 파일을 찾아 바꾸면 좋겠지만, 사실 이 폴더는 캐시의 역할밖에 없어서 지우면 바꾸기 이전의 값으로 새롭게 생성됩니다. 따라서, 그 기반의 값을 고쳐야 하는데요. 그 값은 다음의 레지스트리 값에 기반합니다.

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\TeamFoundation\Instances\localhost
Uri ==  http://localhost:8083/tfs

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\TeamFoundation\Instances\localhost\DefaultCollection
Uri ==  http://localhost:8083/tfs/defaultcollection

하지만, 이 값을 직접 고치기보다는 아예 새롭게 TFS 서버를 등록하는 식으로 해결하는 것이 더 깔끔합니다. 가령, Visual Studio를 실행하고 "Team Explorer"에서 다음과 같이 srcsrv.ini에 기재한 MYSERVER의 값과 동일한 주소로 연결하는 항목을 포함하는 것입니다.

tfs_public_1.png

등록 후, "tf workfold" 명령어로 출력 결과를 확인해 보면 잘 바뀌었는지 알 수 있습니다.

D:\Sources>tf.exe workfold
===============================================================================
Workspace : TESTPC (TestUser)
Collection: https://guesttfs3.testhvpc.com:8084/tfs/defaultcollection
 $/TestProgram: D:\Sources

이후 다시 ssindex.cmd를 실행하면 정상적으로 소스 서버가 인덱싱되는 것을 확인할 수 있습니다.




한 가지 주의할 것은, "MYSERVER"의 항목과 "tf.exe workfold"가 출력한 Collection의 경로가 일치해야 합니다. 예를 들어, 다음과 같은 상황에서도 정상적으로 동작하지 않습니다.

MYSERVER == http://yoururl:8080/tfs/defaultcollection/
Collection: http://yoururl:8080/tfs/defaultcollection

MYSERVER의 끝에 '/' 문자가 있기 때문에 2개의 항목이 다르다고 판단하기 때문입니다.




팁을 하나 말씀드리면, ssindex.cmd의 인자에 /debug 옵션을 줄 수가 있습니다. 그럼, 다음과 같이 실행 여부를 좀 더 확실하게 알 수 있습니다.

D:\Sources>perl -w -x "%ProgramFiles(x86)%\srcsrv\ssindex.cmd" /debug -SYSTEM=TFS -SYMBOLS="d:\sources\bin\release" -SOURCE=d:\sources
--------------------------------------------------------------------------------

ssindex.cmd [STATUS] : Server ini file: C:\Program Files (x86)\Debugging Tools for Windows (x86)\srcsrv\srcsrv.ini
ssindex.cmd [STATUS] : Source root    : D:\Sources\
ssindex.cmd [STATUS] : Symbols root   : D:\Sources\\bin\Release
ssindex.cmd [STATUS] : Control system : TFS
ssindex.cmd [STATUS] : TFS program name: tf.exe
ssindex.cmd [STATUS] : TFS Label      : <N/A>
ssindex.cmd [STATUS] : Old path root  : <N/A>
ssindex.cmd [STATUS] : New path root  : <N/A>
--------------------------------------------------------------------------------

ssindex.cmd [STATUS] : Running... this will take some time...
ssindex.cmd [INFO  ] : ... wrote C:\Users\TestUser\AppData\Local\Temp\index195FB.stream to D:\Sources\TestProgram.pdb ...
...[생략]...
ssindex.cmd [INFO  ] : ... wrote C:\Users\TestUser\AppData\Local\Temp\index3059.stream to D:\Sources\bin\Release\TestLib.pdb ...




ssindex.cmd에 인자를 전달하는 경우 주의해야 할 사항이 하나 있습니다. -SYMBOLS 인자는 문제가 없는데, -SOURCE 인자에는 큰따옴표(")로 둘러싸면 안됩니다. 예를 들어 다음과 같이 지정하면,

perl -w -x "%ProgramFiles(x86)%\Debugging Tools for Windows (x86)\srcsrv\ssindex.cmd" -SYSTEM=TFS -SYMBOLS="d:\sources\bin\release" -SOURCE="d:\sources"

ssindex.cmd 내부의 -SOURCE 구문 해석에 오류가 있어서 다음과 같이 마지막의 큰따옴표(") 문자를 경로에 포함하게 됩니다.

D:\Sources>perl -w -x "%ProgramFiles(x86)%\Debugging Tools for Windows (x86)\srcsrv\ssindex.cmd" /debug -SYSTEM=TFS -SYMBOLS=d:\sources\bin\release -SOURCE="d:\sources"
--------------------------------------------------------------------------------

ssindex.cmd [STATUS] : Server ini file: C:\Program Files (x86)\Debugging Tools for Windows (x86)\srcsrv\srcsrv.ini
ssindex.cmd [STATUS] : Source root    : D:\Sources"
ssindex.cmd [STATUS] : Symbols root   : D:\Sources\\bin\Release
ssindex.cmd [STATUS] : Control system : TFS
ssindex.cmd [STATUS] : TFS program name: tf.exe
ssindex.cmd [STATUS] : TFS Label      : 
ssindex.cmd [STATUS] : Old path root  : 
ssindex.cmd [STATUS] : New path root  : 
--------------------------------------------------------------------------------

ssindex.cmd [STATUS] : Running... this will take some time...
ssindex.cmd [INFO  ] : ... indexing D:\Sources\bin\Release\TestProgram.pdb
ssindex.cmd [INFO  ] : ... zero source files found ...
...[생략]...
ssindex.cmd [INFO  ] : ... indexing D:\Sources\bin\Release\TestLib.pdb
ssindex.cmd [INFO  ] : ... zero source files found ...

결과적으로 "zero source files found" 문제를 발생하게 됩니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/17/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 46  47  48  49  50  51  [52]  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12329정성태9/16/202012340오류 유형: 650. ASUS 메인보드 관련 소프트웨어 설치 후 ArmouryCrate.UserSessionHelper.exe 프로세스 무한 종료 현상
12328정성태9/16/202012524VS.NET IDE: 150. TFS의 이력에서 "Get This Version"과 같은 기능을 Git으로 처리한다면?
12327정성태9/12/202010139.NET Framework: 938. C# - ICS(Internet Connection Sharing) 제어파일 다운로드1
12326정성태9/12/20209642개발 환경 구성: 516. Azure VM의 Network Adapter를 실수로 비활성화한 경우
12325정성태9/12/20209217개발 환경 구성: 515. OpenVPN - 재부팅 후 ICS(Internet Connection Sharing) 기능이 동작 안하는 문제
12324정성태9/11/202010453개발 환경 구성: 514. smigdeploy.exe를 이용한 Windows Server 2016에서 2019로 마이그레이션 방법
12323정성태9/11/20209385오류 유형: 649. Copy Database Wizard - The job failed. Check the event log on the destination server for details.
12322정성태9/11/202010317개발 환경 구성: 513. Azure VM의 RDP 접속 위치 제한 [1]
12321정성태9/11/20208710오류 유형: 648. netsh http add urlacl - Error: 183 Cannot create a file when that file already exists.
12320정성태9/11/20209898개발 환경 구성: 512. RDP(원격 데스크톱) 접속 시 비밀 번호를 한 번 더 입력해야 하는 경우
12319정성태9/10/20209651오류 유형: 647. smigdeploy.exe를 Windows Server 2016에서 실행할 때 .NET Framework 미설치 오류 발생
12318정성태9/9/20209144오류 유형: 646. OpenVPN - "TAP-Windows Adapter V9" 어댑터의 "Network cable unplugged" 현상
12317정성태9/9/202011446개발 환경 구성: 511. Beats용 Kibana 기본 대시 보드 구성 방법
12316정성태9/8/20209880디버깅 기술: 170. WinDbg Preview 버전부터 닷넷 코어 3.0 이후의 메모리 덤프에 대해 sos.dll 자동 로드
12315정성태9/7/202012166개발 환경 구성: 510. Logstash - FileBeat을 이용한 IIS 로그 처리 [2]
12314정성태9/7/202010564오류 유형: 645. IIS HTTPERR - Timer_MinBytesPerSecond, Timer_ConnectionIdle 로그
12313정성태9/6/202011885개발 환경 구성: 509. Logstash - 사용자 정의 grok 패턴 추가를 이용한 IIS 로그 처리
12312정성태9/5/202015830개발 환경 구성: 508. Logstash 기본 사용법 [2]
12311정성태9/4/202011012.NET Framework: 937. C# - 간단하게 만들어 보는 리눅스의 nc(netcat), json_pp 프로그램 [1]
12310정성태9/3/202010267오류 유형: 644. Windows could not start the Elasticsearch 7.9.0 (elasticsearch-service-x64) service on Local Computer.
12309정성태9/3/202010016개발 환경 구성: 507. Elasticsearch 6.6부터 기본 추가된 한글 형태소 분석기 노리(nori) 사용법
12308정성태9/2/202011257개발 환경 구성: 506. Windows - 단일 머신에서 단일 바이너리로 여러 개의 ElasticSearch 노드를 실행하는 방법
12307정성태9/2/202012037오류 유형: 643. curl - json_parse_exception / Invalid UTF-8 start byte
12306정성태9/1/202010191오류 유형: 642. SQL Server 시작 오류 - error code 10013
12305정성태9/1/202011101Windows: 172. "Administered port exclusions"이 아닌 포트 범위 항목을 삭제하는 방법
12304정성태8/31/202010049개발 환경 구성: 505. 윈도우 - (네트워크 어댑터의 우선순위로 인한) 열거되는 IP 주소 순서를 조정하는 방법
... 46  47  48  49  50  51  [52]  53  54  55  56  57  58  59  60  ...