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

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  160  161  162  [163]  164  165  ...
NoWriterDateCnt.TitleFile(s)
972정성태1/7/201124135개발 환경 구성: 95. SQL Server 2008 R2 이하 버전 정보 확인
971정성태1/5/201133718.NET Framework: 199. .NET 코드 - Named Pipe 닷넷 서버와 VC++ 클라이언트 제작 [2]파일 다운로드1
970정성태1/4/201134248.NET Framework: 198. 윈도우 응용 프로그램에 Facebook 로그인 연동 [1]파일 다운로드1
969정성태12/31/201040352VC++: 45. Winsock 2 Layered Service Provider - Visual Studio 2010용 프로젝트 [1]파일 다운로드1
968정성태12/30/201026604개발 환경 구성: 94. 개발자가 선택할 수 있는 윈도우에서의 네트워크 프로그래밍 기술 [2]
967정성태12/27/201028391.NET Framework: 197. .NET 코드 - 단일 Process 실행파일 다운로드1
966정성태12/26/201026351.NET Framework: 196. .NET 코드 - 창 흔드는 효과파일 다운로드1
965정성태12/25/201027843개발 환경 구성: 93. MSBuild를 이용한 닷넷 응용프로그램의 다중 어셈블리 출력 빌드파일 다운로드1
964정성태12/21/2010143008개발 환경 구성: 92. 윈도우 서버 환경에서, 최대 생성 가능한 소켓(socket) 연결 수는 얼마일까? [14]
963정성태12/13/201027882개발 환경 구성: 91. MSBuild를 이용한 닷넷 응용프로그램의 플랫폼(x86/x64)별 빌드 [2]파일 다운로드1
962정성태12/10/201022759오류 유형: 110. GAC 등록 - Failure adding assembly to the cache: Invalid file or assembly name.
961정성태12/10/201099798개발 환경 구성: 90. 닷넷에서 접근해보는 PostgreSQL DB [5]
960정성태12/8/201045088.NET Framework: 195. .NET에서 코어(Core) 관련 CPU 정보 알아내는 방법파일 다운로드1
959정성태12/8/201031914.NET Framework: 194. Facebook 연동 - API Error Description: Invalid OAuth 2.0 Access Token
958정성태12/7/201028918개발 환경 구성: 89. 배치(batch) 파일에서 또 다른 배치 파일을 동기 방식으로 실행 및 반환값 얻기 [2]
957정성태12/6/201031652디버깅 기술: 31. Windbg - Visual Studio 디버그 상태에서 종료해 버리는 응용 프로그램 [3]
953정성태11/28/201036873.NET Framework: 193. 페이스북(Facebook) 계정으로 로그인하는 C# 웹 사이트 제작 [5]
952정성태11/25/201025327.NET Framework: 192. GC의 부하는 상대적인 것! [4]
950정성태11/18/201076681.NET Framework: 191. ClickOnce - 관리자 권한 상승하는 방법 [17]파일 다운로드2
954정성태11/29/201048679    답변글 .NET Framework: 191.1. [답변] 클릭원스 - 요청한 작업을 수행하려면 권한 상승이 필요합니다. (Exception from HRESULT: 0x800702E4) [2]
949정성태11/16/201027231오류 유형: 109. System.ServiceModel.Security.SecurityNegotiationException
948정성태11/16/201036024.NET Framework: 190. 트위터 계정으로 로그인하는 C# 웹 사이트 제작 [7]파일 다운로드1
947정성태11/14/201041669.NET Framework: 189. Mono Cecil로 만들어 보는 .NET Decompiler [1]파일 다운로드1
946정성태11/11/201041504.NET Framework: 188. .NET 64비트 응용 프로그램에서 왜 (2GB) OutOfMemoryException 예외가 발생할까? [1]파일 다운로드1
945정성태11/11/201025036VC++: 44. C++/CLI 컴파일 오류 - error C4368: mixed types are not supported
944정성태11/11/201031517VC++: 43. C++/CLI 컴파일 오류 - error C2872: 'IServiceProvider' : ambiguous symbol could be ...
... 151  152  153  154  155  156  157  158  159  160  161  162  [163]  164  165  ...