이전 Team Foundation Server (이하 TFS) 를 이용하여 통합 소스 관리 프로젝트를 수행한 적이 있습니다. TFS Object Model 이 참 잘 되어 있기 때문에 특별한 레퍼런스 없이도 쉽게 API 를 제어할 수 있었습니다. 허나 이상하게 Shelve(보류 기능) 과 관련하여 한참을 삽질을 한 적이 있는데요, 지금에 와서도 왜 이런지 이해할 수 없는 문제이기도 합니다.

다른 TFS Object Model 객체에서도 이러한 도메인 네이밍과 관련된 룰이 모두 통일되어 있다면 그냥 '그런가부다!!!' 할텐데, Shelve 에서만 이러한 문제가 발생한답니다. 이건 뭐~

var vcs                        = GetVersionControlServer();
var sourceController        = ObjectFactory.CreateObject<ISourceController>();
var workspace               = vcs.GetWorkspace(checkoutFilePath);

Shelveset set        = new Shelveset(vcs, title,
owner);
set.Comment        = description;

PendingChange[] pendingChanges = workspace.GetPendingChanges(checkoutFilePath, RecursionType.None);
workspace.Shelve(set, pendingChanges, ShelvingOptions.None);

   

오류 내용은 아래와 같습니다.

테스트 메서드 TestProject.TfsControllerTest.SaveShelvesetTest에서 예외를 throw했습니다. Microsoft.TeamFoundation.VersionControl.Client.VersionControlException: 다른 사용자가 소유한 보류 집합을 만들 수 없습니다.

Microsoft.TeamFoundation.VersionControl.Client.Workspace.ShelveInternal(Shelveset shelveset, PendingChange[] changes, ShelvingOptions options)

Microsoft.TeamFoundation.VersionControl.Client.Workspace.Shelve(Shelveset shelveset, PendingChange[] changes, ShelvingOptions options)

GConfigurationAssistant.SourceControl.TfsController.SaveShelveset(String title, String description, String owner, String checkoutFilePath) : C:\DxTFS2008\GMarket\GConfigurationAssistant\SourceControl\TfsController.cs: 줄 158

TestProject.TfsControllerTest.SaveShelvesetTest() : C:\DxTFS2008\GMarket\GConfigurationAssistant\TestProject\TfsControllerTest.cs: 줄 185

이런 코드가 있을 때, 빨간색의 owner 는 반드시 DOTNETXPERT\XXX 와 같은 계정 형태로 지정해 주어야 합니다. 만약 xxx@dotnetxpert.com 와 같은 사용자 계정은 맥 없이 Shelve 할 수 없다는 오류가 발생한답니다. 뭐 여기까지면 이해하겠습니다만… 쩝...

더 이해할 수 없는 건 dotnetxpert\xxx 처럼 도메인명과 계정명의 대소문자가 틀려도 오류가 난답니다. 줸장~

사소한 문제일 수도 있지만, 풀리지 않는 미스테리인지, 아니면 명백한 TFS Object Model 의 버그인지...

Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 2009.10.23 11:47 Address Modify/Delete Reply

    비밀댓글입니다

실버라이트가 포함된 웹 어플리케이션 팀 빌드 오류 문제
 
Team Foundation Server(이하 TFS) 의 Team Build 는 굉장히 유용한 기능의 하나입니다. 팀 개발에서 팀 빌드는 언제나 신선한 어플리케이션을 유지하도록 하여 어플리케이션의 심장을 뛰게 하는 역할을 합니다.
 
집에서 관리하는 서버를 이용하여 작은 규모로 개발하던 사이트가 있었습니다. 이 사이트는 TFS Checkin Policy 를 적용하여 체크인마다 팀 빌드를 수행하도록 하여 테스터는 항상 최신 빌드의 사이트를 시연하거나 테스트 할 수 있도록 구성하였습니다. (단, 웹 어플리케이션은 추가적인 Deploy Executing 설정이 필요합니다.)
 
이러한 과정 중에 웹 어플리케이션에 Silverlight 패키징 파일의 .XAP 파일이 포함이 되었습니다. 바로 그 이후부터 팀 빌드는 지속적으로 실패하게 됩니다.
 
[Any CPU/Release] C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets(60,3): 오류 MSB3021: "ClientBin\DevDCCMap.xap" 파일을 "C:\Users\TFSService\AppData\Local\Temp\HOONS\HOONS Build\Binaries\Release\_PublishedWebsites\DevDCC.Web\ClientBin\DevDCCMap.xap"(으)로 복사할 수 없습니다. 'ClientBin\DevDCCMap.xap' 경로의 일부를 찾을 수 없습니다.
 
실버라이트 전문가인 공도님께서 해결 방법을 알려주셨는데, 그 외에 다른 방법도 있더군요.
 
[그림1] 프로젝트에서 항목을 제외한다
 
근복적인 해결 방법은 .XAP 파일을 제거하는 것입니다. 하지만 빌드마다 .XAP 파일이 복사가 되거나 Web Application 의 속성을 변경하여 복사가 되지 않도록 할 수도 있으나 로컬에서 최신의 Silverlight 의 XAP 이 적용이 안되어 정상적인 테스트가 어려워지기도 합니다.
 
그래서 그냥 “프로젝트에서 제외” 명령을 수행하면 물리적인 파일은 지속적으로 갱신되지만 프로젝트에서만 제외할 수 있습니다. 그리고 팀 빌드도 더 이상 오류를 내지 않습니다.
Posted by 땡초 POWERUMC

댓글을 달아 주세요

Team Foundation Server 2008(이하 TFS) 를 Visual Studio 2003 에서 사용하기 위해서 별도의 프로바이더(Provider) 를 설치하시면 됩니다.
 
일단 다운로드 정보는 아래에서 찾을 수 있습니다. Team Explorer 2008 을 설치하고 아래 다운로드를 설치하십시오.

Visual Studio Team System 2008 Team Foundation Server MSSCCI Provider
 
 
요즘 TFS MSSCCI Provider 를 설치하여 VS 2003 에서 작업 중 입니디만, 예상할 수 없는 동작을 하기도 하네요.
 
쓸만한가요?
 
개인적인 의견입니다만, TFS 2005/2008 을 사용하기 위해서는 해당 버전의 Visual Studio 를 사용하는 것이 해당 TFS 에 가장 최적화가 되었다고 생각하네요.
 
어쨌든 Visual Studio 2003 에서 TFS 2008 에 접속을 하고 사용하는데는 문제가 없습니다만, MSSCCI Provider 는 Visual Studio 2003 에서 기본적인 소스 코드 형상 관리 기능 정도만 제공합니다.
 
그래서 TFS 에서 제공하는 Workitem Tracking 이나 Reports 등의 기능을 이용하기 위해서는 Team Explorer 설치 시 설치되는Visual Studio 2008 Shell 에서 별도의 작업을 해야 합니다.
 
어쨌든 두 Shell 을 같이 실행하여 사용하면 모든 기능을 이용할 수 있습니다. 다만, 불편할 뿐입니다 ^^;
 
 
다른 문제는 없나요?
 
있습니다. Visual Studio 2003 에 체크인을 하게 되면, Visual Studio 2008 에서 체크인 하는 동작과 비슷하게(?) 작동합니다만, 동작 자체가 오동작 하거나 다른 경우도 있습니다.
 
[그림1] 체크 박스를 클릭하는 순간 알림 메일이 발송
 
작업 항목을 연결하면 곧바로 알림 메일이 발송됩니다. 사용자가 클릭을 잘못 할 수 도 있고, 여러 개의 항목을 한번에 하나의 작업 항목으로 연결하는 경우가 있습니다. 그러나 작업 항목의 체크 박스를 클릭하는 순간 알림 메일이 발송되네요.
 
 

[그림2] ‘유효하지 않는 위치’ 를 정상적인 방법으로 교정할 수 없다(특정 경우에 한함)
 
그리고 소스 제어 변경에 오류가 있는 것 같습니다. ‘유효하지 않는 위치’ 가 어떤 경우에는 유효한 위치이더라도 ‘유효화지 않는 위치’라고 표시됩니다. 새로고침이나 재바인딩해도 문제가 해결되지 않는데, 어이 없게 해결했네요. 아래와 같이 말이죠^^
 
재바인딩하여 ‘유효하지 않는 위치’를 확인 -> 솔루션 탐색기에서 체크인 동작 -> 체크인 동작 취소 -> 소스제어 변경에 가면 ‘유효함’ 이라고 변경됨
Posted by 땡초 POWERUMC

댓글을 달아 주세요