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

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  97  98  99  [100]  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11524정성태5/15/201828102.NET Framework: 750. C# 7.2 - readonly 구조체 [5]파일 다운로드1
11523정성태5/15/201824077.NET Framework: 749. C# - 값 형식의 readonly 인스턴스에 대한 메서드 호출 시 defensive copy 발생 [1]파일 다운로드1
11522정성태5/15/201823186개발 환경 구성: 378. Azure - VM 진단 설정 화면의 "This subscription is not registered with the Microsoft.Insights resource provider."
11521정성태5/15/201820564개발 환경 구성: 377. Azure - 원하는 성능 데이터로 모니터링 대시보드 구성
11520정성태5/12/201823397.NET Framework: 748. C# 7.1 - 참조 어셈블리(Ref Assemblies)
11519정성태5/12/201825821개발 환경 구성: 376. ASP.NET Web Application 프로젝트의 FileSystem 배포(Publish) 시 Before/After Task 설정 방법 [1]
11518정성태5/10/201823771.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
11517정성태5/10/201821089.NET Framework: 746. Azure runbook 예제 - 6시간 동안 수행 중인 VM을 중지 [1]파일 다운로드1
11516정성태5/9/201822576.NET Framework: 745. Azure runbook을 PowerShell 또는 C# 코드로 실행하는 방법파일 다운로드1
11515정성태5/9/201825302.NET Framework: 744. C# 6 - Expression bodied function [1]
11514정성태5/3/201823043오류 유형: 466. Bitvise - Error in component session/transport/kexHandler [2]
11513정성태5/3/201830803.NET Framework: 743. C# 언어의 공변성과 반공변성 [9]파일 다운로드2
11512정성태5/2/201822570개발 환경 구성: 375. Azure runbook 실행 시 "Errors", "All Logs"에 오류 메시지가 출력되는 경우
11511정성태5/2/201823238개발 환경 구성: 374. Azure - Runbook 기능 소개
11510정성태4/30/201824318.NET Framework: 742. windbg로 확인하는 Finalizer를 가진 객체의 GC 과정파일 다운로드1
11509정성태4/28/201822144.NET Framework: 741. windbg로 확인하는 객체의 GC 여부
11508정성태4/23/201824296개발 환경 구성: 373. MSBuild를 이용해 프로젝트 배포 후 결과물을 zip 파일로 압축하는 방법파일 다운로드1
11507정성태4/20/201825616개발 환경 구성: 372. MSBuild - 빌드 전/후, 배포 전/후 실행하고 싶은 Task 정의
11506정성태4/20/201829659.NET Framework: 740. C#에서 enum을 boxing 없이 int로 변환하기 - 두 번째 이야기 [7]파일 다운로드1
11505정성태4/19/201822660개발 환경 구성: 371. Azure Web App 확장 예제 - Simple WebSite Extension
11504정성태4/19/201824195오류 유형: 465. Azure Web App 확장 - Extplorer File manager 적용 시 오류
11503정성태4/19/201822136오류 유형: 464. PowerShell - Start-Service 명령 오류 (Service 'xxx' cannot be started)
11502정성태4/17/201825104개발 환경 구성: 370. Azure VM/App Services(Web Apps)에 Let's Encrypt 무료 인증서 적용 방법 [3]
11501정성태4/17/201822990개발 환경 구성: 369. New-AzureRmADServicePrincipal로 생성한 계정의 clientSecret, key 값을 구하는 방법파일 다운로드1
11500정성태4/17/201823900개발 환경 구성: 368. PowerShell로 접근하는 Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11499정성태4/17/201822151개발 환경 구성: 367. Azure - New-AzureRmADServicePrincipal / New-AzureRmRoleAssignment 명령어
... 91  92  93  94  95  96  97  98  99  [100]  101  102  103  104  105  ...