Team Foundation Object Model 을 이용하여 별도의 TFS Client 를 개발하는 경우가 종종 있습니다. 개발자라면 "Visual Studio 에 Team Explorer 가 있는데 왜~?" 라고 묻기도 하지만, 비개발자들 예를 들면, 관리자, 비즈니스 담당자들이 Team Foundation Server 에 접속하기 위해서는 Visual Studio 를 실행해야 합니다. 왜냐하면, Team Explorer 의 필수 구성 요소가 바로 Visual Studio Shell 이기 때문이죠.

Team Foundation Web Access 와 같은 제품이 있긴 하지만, TFS 를 사용해 보지 않은 사람은 사용법도 익히기 어려울 뿐만 아니라 특정한 프로세스를 강요할 수 없는 이유이기도 합니다. 이런 이유로 개별적인 TFS Client 제품을 선호하는 경우가 있기도 합니다.

Team Foundation Client (예를 들면 Team Explorer) 등은 Visual Studio 에 매우 종속적인 제품입니다. 그래서 TFS Server 의 정보를 Visual Studio 하위의 레지스트리에 관리합니다.

   

아래는 그 예를 보여주는 오류 시나리오 입니다.

오류 발생 조건

1. Visual Studio 에서 특정 TFS 서버를 제거한다

2. 독립 TFS Client 에서 TFS 에 접속이 안된다.

   

오류 해제 조건

1. Visual Studio 에서 특정 TFS 서버로 연결한다

2. 독립 TFS Client 에서 TFS 탭 접속이 된다.

   

오류가 발생하는 예외 메시지 입니다.

처리되지 않은 예외: Microsoft.TeamFoundation.TeamFoundationInvalidServerNameException: TF30076: 제공한 서버 이름 dxtfs2008a이(가) 검색된 서버 URI와 일치하지 않습니다. 서버 이름이 올바른지 확인하십시오.

위치: Microsoft.TeamFoundation.Client.TeamFoundationServer.GetUriForName(String name)

위치: Microsoft.TeamFoundation.Client.TeamFoundationServer.get_Uri()

위치: Microsoft.TeamFoundation.Client.CheckAuthenticationProxy..ctor(TeamFoundationServer server)

위치: Microsoft.TeamFoundation.Client.TeamFoundationServer.Authenticate(Boolean useProvider, ICredentialsProvider provider)

위치: Microsoft.TeamFoundation.Client.TeamFoundationServer.EnsureAuthenticated()

위치: ConsoleApplication1.Program.Connection() 파일 C:\Users\엄준일\Documents\Visual Studio 2008\Projects\TFSSample\ConsoleApplication1\Program.cs:줄 43

위치: ConsoleApplication1.Program.Main(String[] args) 파일 C:\Users\엄준일\Documents\Visual Studio 2008\Projects\TFSSample\ConsoleApplication1\Program.cs:줄

22

계속하려면 아무 키나 누르십시오 . . .

   

위 문제를 해결하기 위해서는 반드시 서버 주소가 팀 탐색기에 등록이 되어야 합니다. 이는 곧 팀 탐색기에 등록이 되어야 한다는 말이며, 이는 Visual Studio 관련 레지스트리에 등록이 되어야 한다는 의미입니다.
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\TeamFoundation\Servers

위의 레지스트리에 TFS 서버 주소를 넣어주시면, 독립 TFS Client 에서도 잘 접속이 되는 것을 확인할 수 있습니다.

Posted by 땡초 POWERUMC

댓글을 달아 주세요

설치 과정 중에 TF255040 문제

Team Foundation Server 2010 을 설치하는 중 TF255040 오류가 발생하였습니다. 아래의 그림과 같이 SQL Server 의 Reporting Services 와 관련된 컴포넌트가 설치 되지 않았다는 오류입니다. 훔...

SQL Server Analysis Services 인스턴스를 찾지 못한다는 오류 메시지가 나타납니다.

 

TFS 설치 오류 로그를 자세히 보면 아래와 같이 문제 지점의 예외 메시지를 찾을 수 없습니다.

[Error @12:07:34.650] Microsoft.TeamFoundation.Admin.TfsAdminException: TF255040: Install SQL Server Reporting Services or at a minimum SQL Client Connectivity Tools on the application tier to ensure Analysis Services object model is present for warehouse processing. ---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.AnalysisServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. 지정된 파일을 찾을 수 없습니다.

at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)

at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

at System.Reflection.Assembly.Load(String assemblyString)

at Microsoft.TeamFoundation.Admin.UIHelper.CheckAnalysisInstanceLoad(String analysisInstance)

--- End of inner exception stack trace ---

at Microsoft.TeamFoundation.Admin.UIHelper.CheckAnalysisInstanceLoad(String analysisInstance)

at Microsoft.TeamFoundation.Management.Controls.WizardCommon.ServerTestControl.m_testWorker_DoWork(Object sender, DoWorkEventArgs e)

at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)

at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)


그래서 Microsoft.AnalysisServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 어셈블리가 GAC 등록이 되어 있는지 확인을 보았습니다. 역시나 문제는 위의 어셈블리가 설치가 되지 않아서 발생한 문제입니다.

      

TF255040 오류 문제 해결하기

해결 방법은 가지가 있습니다. 중에 번째 방법을 추천 드립니다.

왜냐하면 SQL Express 버전을 설치하면 되지만, 결국 SQL Server 인스턴스를 만들어야 하기 때문에 왠지 TFS 전용 서버의 순결함을 잃는 하군요.. 사용하지도 않을 SQLEXPRESS 라는 반갑지 않은 인스턴스와 말이죠. 번째 SQL Server 2008 Feature Pack SQL Server 구성 요소 일부만 설치할 있습니다. 제가 필요로 하는 Analysis Service 관련 어셈블리만 설치되도록 설치 패키지를 제공해 주고 있습니다.

  • 그럼 Microsoft SQL 2008 관련 구성 요소를 설치해 주어야 하는데, 아래의 주소에서 기본적인 클라이언트가 설치되도록 합니다. 근데 Management Studio Express 설치하게 되면 SQLEXPRESS 라고 하는 인스턴스가 설치가 되는데 Team Foundation Server Application Tier SQLEXPRESS 인스턴스가 그다지 필요해 보이지도 않고, 설치 시간도 오래걸리고요.

  • 위의 방법은 Analysis Services Object 어셈블리만 설치하는 방법입니다. HTML 페이지가 다운로드 되면 HTML 파일을 열어봅니다. 다운로드 가능한 여러 가지 목록 중에 아래 Analysis Services Object 골라서 다운로드 하시는 것이 좋겠죠?

       

아래를 설치하고 Team Foundation Administrator Console 다시 실행해 주시면 아래의 그림과 같이 정상적으로 SQL Server Analysis Services 접근할 있습니다.

   

Posted by 땡초 POWERUMC

댓글을 달아 주세요

Configure Team Foundation Build Service 에서 Start Wizard 를 클릭합니다.

   

아래는 Build Service 설치 안내 페이지 입니다. 다음을 클릭합니다.

   

Team Build 를 수행한 Team Project Collection 을 지정해야 합니다. Browser 를 클릭하여 Team Project Collection 을 선택합니다. 만약 Team Foundation Server 와 연결되지 않은 상태일 경우 Team Foundation Server 와 연결해야 합니다.

   

   

기본 설정대로 Recommended 를 선택하고 다음을 클릭합니다.

   

Team Build 를 수행할 계정과 포트를 입력합니다. 필자는 TFSBUILD 계정으로 사용하였고, 환경에 따라 NETWORK SERVICE 등으로 사용하셔도 됩니다.

   

모든 설정이 완료 되었고, Verify 를 클릭하여 Team Build 환경을 점검합니다.

   

모든 점검이 완료되면, Configure 를 클릭하여 설치를 진행합니다.

   

아래는 Team Foundation Build Service 설치가 완료된 화면입니다.

   

   

Posted by 땡초 POWERUMC

댓글을 달아 주세요

Team Foundation Server 2010 은 기존의 2008 버전에 비해 굉장히 설치가 간단해 졌습니다.  

사실 설치과 구성 패키지 자체는 TFS 2008 이 간단하긴 했지만, 구성이 올바르게 완료되어야만 설치가 가능했었습니다. 이런 문제로 인해서 초기 설정이 유효하지 않을 경우 설치를 완료한들 다시 제거를 하고 재설정을 했던 경우가 많았습니다. 그리고 TFS 2008 에서는 설정 정보가 IIS 의 TFS Web Service 의 web.config 와 데이터베이스의 특정 필드를 직정 수정해야 하는 관리상의 불편함이 많았습니다.

하지만 이번 Team Foundation Server 2010 는 이런 면에서 초기 설치 단계에서 구성하는 단계까지 많이 편리해졌습니다. 설치와 구성을 따로 따로 하도록 말이죠.  

아래는 Team Foundation Server 2010 을 설치하고, Team Foundation Server Administration Console 을 이용하여 TFS 환경을 구성하는 방법입니다. 

아래의 설치 과정은 3-tier 로 구성된 서버에 TFS 2010 을 설치하는 단계입니다.

  • 서버 1 : Active Directory, DNS 서버
  • 서버 2 : MSSQL 2008
  • 서버 3 : Team Foundation Server 2010

   

Team Foundation Server Administrator Console 을 실행하여 Configure Installed Features 를 클릭합니다.

   

다중 Tier 환경으로 설치할 예정이므로, Advanced 를 선택하고 Start Wizard 를 클릭합니다.

   

Wizard 안내 페이지입니다. 그냥 다음으로 넘어 갑니다.

   

SQL Server 의 인스턴스를 입력하고 Test 를 클릭합니다. 인스턴스가 유효하면 푸른색 V 표시가 나타나고, 다음으로 넘어 갑니다.

   

Service Account 계정을 입력하고 Test 를 클릭해보고, 계정이 유효하면 다음으로 넘어갑니다.

   

Team Foundation Server 2010 의 웹 서비스의 설정을 합니다. 그냥 기본 구성 그대로 다음으로 넘어갑니다.

   

보고서를 구성하는 페이지의 안내입니다. 필자는 보고서를 구성할 것이므로, Configure Reporting for use with Team Foundation Server 항목 체크 박스를 체크 한 후에 다음으로 넘어갑니다.

   

Reporting Service 인스턴스를 입력하고 Populate URLs 를 클릭하면 유효한 보고서 서비스를 찾아줍니다. 그리고 다음으로 넘어갑니다.

   

TFS Report 서비스의 실행 계정을 지정해 줍니다. 필자는 기본 계정인 NETWORK SERVICE 계정을 사용합니다.

   

아래는 Sharepoint 를 설치를 안내하는 페이지 입니다. 다음으로 넘어갑니다.

   

Sharepoint 서버의 계정을 입력하고 Test 를 클릭하여 유효성을 검사합니다. 그리고 다음으로 넘어갑니다.

   

기본적으로 Team Project Collection 이 체크되어 있습니다. 그대로 다음으로 넘어갑니다.

   

모든 설정이 완료 되었습니다. Verify 를 클릭하여 최종 점검을 진행합니다.

   

Verify 결과가 양호할 경우 설치를 진행하도록 합니다. Configure 를 클릭하여 설치를 진행합니다.

   

아래는 Team Foundation Server 2010 이 설치가 완료되었습니다.

   

   

이제 설치가 완료되었고, Team Foundation Server 관리를 위하여 관리 권한을 지정합니다.

Application Tier 의 Administer Group Membership 을 클릭합니다.

   

Team Foundation Administrators 그룹을 더블 클릭(또는 Properties 클릭) 하고, 관리자 계정을 지정해 줍니다.

   

   

이제 모든 설치와 구성을 마쳤습니다. 아래의 그림은 Visual Studio 2010 으로 Team Foundation Server 2010 에 연결된 모습입니다.

   

Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 멘티돕스 2010.03.02 16:08 Address Modify/Delete Reply

    Active Directory 없이는 사용이 불가능 한건가요? 큰 규모가 아니라면 Active Directory 까지 사용하지 않는데가 더 많지 않나요?

    • 땡초 POWERUMC 2010.03.02 17:38 신고 Address Modify/Delete

      AD 없이도 설치할 수 있어요.
      단일 서버의 서버 사양만 된다면 메뉴얼상 2,200~3,600 명까지 수용할 수 있어요^^

      대신, Lab 기능을 사용하시려면 반드시 AD 가 설치가 되어있어야 합니다.

  2. 김종훈 2010.07.23 17:20 Address Modify/Delete Reply

    현재 SQL 2005 std, TFS2010을 설치했습니다.

    TF255186 : The following SQL Server reporting services instance could not be found : MSSQLSERVER... : the server name is TEST_SVR

    * SQL 서버이름 : TEST_SVR => Window인증 + Reporting service 로 로그인하면 성공합니다.

    sql이 지원을 못하는건지.. 감을 못잡겠습니다.

Hyper-V 의 가상 서버의 Active Directory 서버 간에 발생한 발생한 문제에 대한 내용입니다.    


오류 문제

예전 Team Foundation Server 2008 을 VMWare Server 를 이용하여 3-Virtual Machine 으로 구성했던 적이 있습니다.

  • Server 1 - Active Directory Server
  • Server 2 - MSSQL 2008 Server
  • Server 3 - Team Foundation Server 2008 and Sharepoint and Web Server    

최근에 이와 같은 환경으로 Team Foundation Server 2010 Beta 2 를 구성하였고, 도메인으로 구성된 서버간에 MSSQL 2008 설치 시에 인증과 관련된 문제가 발생하였습니다. MSSQL 2008 이 설치가 되지 않는 시점에서 Team Foundation Server 설치는 꿈도 꾸지 못할 문제이기도 합니다.    

아래는 오류가 발생하여 여러 가지 방법으로 문제를 해결하기 위해 테스트를 진행했었습니다.

Hyper-V 1 (AD) : Windows Server 2003 64비트, Active Directory, DNS (정방향, 역방향)

Hyper-V 2 (SQL2008): Windows Server 2003 64비트, SQL 2008 (SqlServer 계정 도메인 로그인->SQL 설치)

           Error 1 : 사용자 식별자 매핑 오류 – 계정에 CER 인증서를 매핑하여 오류 안남

           Error 2 : 아래의 스크린 샷

                     Test 1 : SqlServer 계정 + 로컬 Administrator 계정으로도 설치 실패

                     Test 2 : AD 서버 설치시 Windows 2008, 2003, 2000 호환 모드로 환경에서 각각 SQL 2008 설치 실패

                     Test 3 : 로컬 Administrator 계정으로도 설치 실패

                     Test 4 : SqlServer 도메인 계정으로 설치 실패

 

이와 관련된 문제를 해결하기 위해 많이 노력하였으나, 결국 몇 달 동안 해결하지 못한 채 단일 서버로 구성하여 쓰고 있다가 최근에 VPC 와 Hyper-V 용으로 단일 서버로 설치된 버전이 나와서 이것으로 사용하고 있었습니다.

하지만, 이런 미스터리를 해결하지 못한 나를 원망하면서 머리만 쥐어짜고 있는 와중에 중요한 단서를 하나 얻게 되었습니다. 바로 Active Directory 로 묶인 서버간에 PING 이 정상적으로 되지 않고 오류가 발생했던 것입니다. 이 문제는 정말 다행인지 중요한 단서가 되었고 결국에는 문제를 해결할 수 있었습니다.

즉, Active Directory 로 묶인 Hyper-V 간의 가상 서버 간에 PING 을 날리면 아래와 같은 오류가 발생했습니다. 가상 서버의 IP 로 PING 을 날리면 정상이지만, NetBios 이름으로 PING 을 날릴 경우에만 발생한다는 것입니다.

IP 드라이버를 찾을 수 없습니다. - 에러 코드 5

저는 시스템이나 서버를 전문적으로 관리해 본 적이 없기 때문에, 머리를 쥐어짜면서 해결을 하기 위해 몸부림을 쳤던 것이지요.

   

오류의 원인

문제는 바로 Hyper-V 의 가상 서버간의 도메인 계정의 SID 가 원인인 것으로 밝혀졌습니다. 예전에 필자는 TFS 백업을 신규 도메인에서 복원하기 에서 설명했듯이 도메인 계정은 내부적으로 SID 와 매핑이 되어 있다는 것입니다. 쉽게 얘기하면, SID 는 도메인간에 같은 이름이나 계정이라도 "그때 그때 달라요" 라는 것이죠.

이런 문제를 재연하는 방법은 아래와 같이 하시면 됩니다. (굳이 Hyper-V 가 아니더라도)  

  • Hyper-V (또는 기타 가상화 머신) 에서 Windows Server 200x 설치한다.
  • 설치된 Windows .VHD 파일을 복사한다.
  • 최초 설치된 윈도우에 Active Directory 설치한다
  • 복사한 .VHD 서버는 Active Directory 도메인 가입한다.
  • PING 날리면 "IP 드라이버를 찾을 없습니다 - 에러 코드 5" 에러가 나온다.

참 쉽죠?? 윈도우의 SID 에 대해서는 제가 자세히 설명하기 힘드므로, 아래의 블로그를 참고 하시면 됩니다.

Windows 서버에서의 SID 란 무엇인가?

즉, 에러의 원인을 유추해보면

첫 번째, Active Directory 의 도메인 계정은 가상 서버간에 SID 를 제대로 식별할 수 없으므로 오류가 난다거나
두 번째, 윈도우 내부적으로 고유의 SID 를 갖고 설치가 된다거나
세 번째, 첫 번째와 두 번째 원인이 복합적이거나…


오류 해결 방법

오류의 해결 방법은 의외로 간단했습니다. 그렇게 발버둥 칠 때는 검색을 해봐도 해결 방법을 찾을 수 없었지만, 뭔가 느낌이 온 이후에는 한방에 검색하니 해결 방법이 검색되더군요..

Ping gives - Unable to contact IP driver - Error Code 5

즉, 윈도우의 SID 를 초기화하고 재할당하기 위해서 "sysprep" 도구를 이용하는 방법입니다. 아래와 같이 반드시 "일반화(Generate)" 를 체크하셔야 합니다.

   

 

이런 해결 방법으로 유추해보면 아마도 위의 두 번째 방법인, 윈도우 내부적으로 SID 를 갖고 있는 것이 아닐까라는 생각이 듭니다. 아마도 가장 유력한 것이 Microsoft 에서 윈도우 라이선스 인증을 위한 데이터베이스에서 라이선스 정책을 따르기 위해 고유 윈도우 SID 를 생성하는 것이라는 생각이 듭니다.    

VHD 이미지로 윈도우 설치의 귀차니즘을 때우기 위한 꽁수가 Active Directory 에서의 큰 문제로 발생하니 무척 허무하기도 합니다. 하지만 이렇게 지식을 쌓아가도 어차피 언젠가는 한줌의 재가 될 미래를 생각하니, 판도라 행성에서 다시 태어나길 바라며 ^_^ (영화 아바타 증후군을 앓고 있습니다 +_+)

Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 하나둘넷 2010.01.19 18:19 Address Modify/Delete Reply

    I see you ~ ^^

이전 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

    비밀댓글입니다

Visual Studio 의 단위 테스트의 문제

최근 가장 트랜드한 개발 방법론 중의 XP 에서는 단위 테스트 코드를 작성하도록 권장하고 있습니다. 단위 테스트는 그 코드를 작성하기에 많은 노력이 필요하지만, 그 이상의 가치와 편리함, 그리고 중요성 등을 잘 알고 있기 때문에 프로젝트의 대부분의 코드 또는 테스트 등은 단위 테스트를 작성합니다.

하지만 Visual Studio 의 단위 테스트에 치명적인 문제가 있었네요. 바로 Visual Studio 의 단위 테스트는 x64 를 지원하지 않습니다. 단위 테스트를 수행할 대상 프로젝트나 어셈블리가 x64 라면 단위 테스트를 수행할 수 없습니다. 만약 프로젝트의 속성의 빌드가 Any Cpu 또는 x86 이 아닌 x64 라면 테스트는 오류가 나고 맙니다.

먼저 단위 테스트 코드를 작성하여 단위 테스트를 수행하였습니다. 테스트를 실시하는 어셈블리는 x64 로 빌드된 어셈블리이고, 이것을 단위 테스트에 참조하여 사용하였습니다. 그리고 제가 사용하는 OS 는 Windows 7 x64 버전입니다.

이미 언급했지만, 프로젝트의 빌드 타입이 Any CPU 또는 x86 에서는 잘 돌아갑니다. 하지만 Unit Test 는 64비트 어플리케이션에 대해 BadImageFormatException 을 내뱉습니다. 일반적으로 BadImageFormatException 이라고 하면 어셈블리의 헤더 정보 등이 잘못되었거나 말 그대로 잘못된 이미지의 어셈블리일 경우 발생합니다.

테스트 메서드 MseServiceCatalogTest.ServicesImportTest.ServicesImportUnitTest.ServicesImportTest에서 예외를 throw했습니다. System.BadImageFormatException: 파일이나 어셈블리 'Microsoft.MSE.Tools.MetadataLoader.Module, Version=7.1.33.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다.

   

Visual Studio 단위 테스트는 x86 만 지원한다~?   

이리저리 검색해보니 Visual Studio 의 Unit Test 에서는 x32 어셈블리만을 로드할 수 있다고 합니다. 아마도 Unit Test Framework 가 x86 으로 빌드가 된 모양새입니다. 테스트 대상 프로젝트를 Any Cpu 로 맞추고 테스트 프로젝트를 x64 로 빌드하고 테스트를 수행해도 마찬가지 결과입니다.    

MseServiceCatalogTest.ServicesImportTest.ServicesImportUnitTest, MseServiceCatalogTest 형식을 가져올 수 없습니다. 오류: System.BadImageFormatException: 파일이나 어셈블리 'MseServiceCatalogTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다.

파일 이름: 'MseServiceCatalogTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
위치: System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
위치: System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
위치: System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
위치: System.Type.GetType(String typeName)
위치: Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.GetType(UnitTestElement unitTest, String type)
위치: Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.ResolveMethods()

   

테스트 대상 어셈블리의 소스 코드가 없으면 어떡해~?    

그렇습니다. 소스 코드가 없으면 빌드 플랫폼을 변경할 수 없어서 단위 테스트를 수행하기가 참 곤란해 지겠지요. 하지만 뭐 방법은 없겠습니까만은 일부 제한적인 방법으로 x64 어셈블리를 x86 어셈블리로 변경할 수 있습니다.    

닷넷 어셈블리는 헤더 정보에 빌드 플랫폼 정보가 포함이 되어 있는데, 이것을 변경하면 됩니다. 그리고 .NET Framework SDK 에는 이러한 헤더를 변경할 수 있는 도구가 제공이 됩니다. 이 도구는 CorFlags.exe 로 CLR 버전을 업그레이드 하거나 x64 어셈블리를 x86 어셈블리로 헤더를 변경할 수 있습니다. 반대로 x64 어셈블리를 x32 어셈블리로 되돌릴 수 있습니다.    

덧붙여, .NET 1.1 어셈블리를 .NET 2.0 어셈블리로 변경하고 싶다면 이 방법으로 가능합니다. 또는 64비트 운영체제에서 32비트로 어셈블리를 변경하여 테스트 용도 등으로 사용할 수 도 있습니다.    

x64 어셈블리를 아래와 같이 x86 어셈블리로 변경할 수 있습니다.

C:\>CorFlags ClassLibrary.DLL /32BIT+

   

강력한 이름으로 서명된 x64 어셈블리는 어떻게?    

강력한 이름으로 서명된 어셈블리는 유감스럽게 CorFlags 로 헤더를 변경한 후에 다시 한번 강력한 이름으로 서명하면 됩니다. 유감스럽게도 만약 키 파일이 없다면 어셈블리를 사용할 수 없게 됩니다. 위에서 얘기 했듯이 이러한 이유로 제한적인 방법이라고 언급을 했습니다. ^_^;    

아무튼 저 같은 경우는 이 키 파일이 없어서 그만 OTL
그나마 다행인 것은 Visual Studio 2010 버전에서는 x64 어셈블리도 단위 테스트를 할 수 있다고 하네요.  

참고 문헌
CorFlags 변환 도구(CorFlags.exe)
http://msdn.microsoft.com/ko-kr/library/ms164699.aspx

 

Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 강영수 2011.04.28 17:11 Address Modify/Delete Reply

    좋은글 잘 보구 갑니다.

에피소드

오래 전 집 컴퓨터를 서버로 운영하면서 Virtual Server 를 이용하여 Team Foundation Server 를 구성하였습니다. 3-Tire 로 구성된 Team Server 는 Windows Server 2003 에서 2008 로 업그레이드를 하였고, Virtual Server 는 Hyper-V 로 교체를 하기 위해 Team Foundation Server 의 데이터베이스를 백업을 해두고 간직해 두고 있었습니다.

사실 Team Foundation Server 를 사용하면서 손에 익으면 익을수록 정말 잘 만든 ALM 솔루션이라는 것을 느꼈지만, 이번에 그 환상은 홀딱 깨지고 말았습니다. 속내를 알면 알수록 잘된 것인지 잘못된 것인지는 현기증이 날 정도로, 고리타분한 구석이 상당히 많기로도 유명합니다. 예를 들어, 소스 제어에서 체크인을 할 수록 데이터베이스는 기하급수적으로 늘어나기도 합니다. 실제로 지난 프로젝트에서는 갑자기 Team Foundation Server 의 운영이 중단되었는데, 그 원인은 바로 하드 디스크의 용량이 부족한 탓이었답니다. Tracking 을 위해 어쩔 수 없다라고 쳐도 데이터베이스의 용량 증가는 무지막지할 정도로 빠르게 진행되기도 합니다. 그 밖에, 도메인 계정을 삭제를 하면 엑세스가 정상적이지 못한 문제 등도 발생하기도 합니다.

각설하고, TFS 의 데이터베이스 백업 파일만 달랑 남은 상황에서 다른 것은 몰라도 소스 코드만은 반드시 건져야 할 상황이 닥쳤습니다. 왜냐하면 제가 만든 소프트웨어 들이 모두 TFS 데이터베이스 백업 파일에 모두 존재했기 때문이죠. TFS 데이터베이스 백업 파일을 복원하고 데이터베이스만으로 소스 코드를 취득하려고 했으나 쉽지 않았습니다.

그 이유는, 소스 제어 데이터베이스의 소스 코드는 GZIP+(암호화?)+Encoding 되어 있습니다. Team Foundation Server 의 소스 코드의 텍스트를 GZIP 압축하는 것은 익히 알고 있었으나, 실제 복원하는 과정에서는 추가적인 알고리즘이 적용이 되어 있어 이것을 복원할 좋은 방법은 없어 보입니다. Reflector 로 코드를 거꾸로 분석부터 해보려고 했지만, 지름길이 아닌 것을 직감하고 진작부터 시도하지는 않았답니다.

또 하나, 사용자 계정으로 체크인 된 소스 코드는 TFS 계정 정보와 매핑이 되기 때문에 무작정 복원했다가 다시 처음부터 다시 복원을 해야 하는 낭패를 볼 수 도 있습니다.

아래는 복원하는 모든 과정을 설명하지 않고, 일부 시행 착오를 격은 부분만 설명하니 주의하시기 바랍니다.

   

새로운 도메인과 컴퓨터에서 복원하기

우선 Virtual Server 에서 가동 중이던 가상 서버는 데이터베이스만 백업 받아놓은 상태로 모두 지워버렸습니다. ㅡ,.ㅡ 만약 같은 도메인과 컴퓨터라면 백업은 크게 문제가 될 것이 없었지만, 제가 처했던 상황은 생각보다 중대한 상황이라는 것을 뒤늦게 알게 되었습니다.

우선 친절하게 MSDN 에서는 이 과정을 잘 설명해 주고 있습니다.

Team Foundation Server 데이터 백업 복원

http://msdn.microsoft.com/ko-kr/library/ms253080(VS.80).aspx

   

방법: 하드웨어 구성에서 다른 하드웨어 구성으로 Team Foundation Server 이동

http://msdn.microsoft.com/ko-kr/library/ms404869(VS.80).aspx

   

계정의 SID 매핑 하기

우선 데이터베이스의 .bak 파일을 복원합니다. 일부 데이터베이스는 동시에 복원되는 것을 추천하기 때문에, 되도록이면 한꺼번에 데이터베이스를 복원하시면 됩니다.

아래의 Command Line 과 같은 폴더에 TfsAdminUtil 를 실행해보면 엑세스 오류가 발생합니다.

 

만약 위와 같이 데이터베이스 엑세스 오류가 발생하면 아래의 절차를 수행하여, [TfsIntegration].[dbo].[tbl_database] 테이블의 servername 컬럼에 자신의 컴퓨터 이름으로 변경해 줍니다.

 

그리고 다시 TfsAdminUtil Sid 를 실행하면 아래와 같은 결과가 나오며, 정상적으로 데이터베이스에 엑세스 할 수 있습니다. 이제 이전 서버의 도메인의 계정과 신규 서버의 도메인 계정을 TfsAdminUtil 로 사용자 매핑이 완료될 때 까지 반복해 주시면 됩니다.

TfsAdminUtil - Team Foundation Admin Utility

Copyright (c) Microsoft Corporation. All rights reserved.

   

Account Name Found Equal to Windows SID

--------------------------------------------------------------------

POWERUMC\Episode2 False False

POWERUMC\episode3 False False

POWERUMC\umc False False

POWERUMC\episode1 False False

POWERUMC\TFSSETUP False False

POWERUMC\TFS2008 False False

POWERUMC\TFSService True False

POWERUMC\TFSReports False False

POWERUMC\Admin False False

 

사용 권한이 유효하지 않을 때

기존에 데이터베이스의 스키마는 이전 TFS 가 설치된 도메인의 TFSService 계정의 스키마이므로, 신규 서버로 도메인을 이전하였다면 TFSService 계정의 데이터베이스 스키마는 계정의 SID 가 달라지게 되므로, 더 이상 유효하지 않게 됩니다. 사실 이 부분에서 시행 착오를 많이 겪었던 것으로 기억합니다.

우선 백업을 복원한 데이터베이스의 TFSService 사용자 계정과 스키마를 삭제하고, 아래와 그림과 같이 관리->로그인 에서 다시 매핑을 하면 됩니다.

 

그리고 로그인에서 사용자 매핑으로 복원된 모든 데이터베이스에 사용자와 스키마를 매핑합니다.

 

팀 탐색기에서 사용 권한 문제

여기 까지 잘 따라왔다면 이제 Team Explorer 를 통해 Team Foundation Server 에 접속해 보면, 아래와 같이 권한 관련 문제가 발생합니다.

 

이러한 경우 TfsSecurity 명령 도구를 이용하여 해결 할 수 있습니다. 하지만 아래와 같은 오류가 발생하는데, RunAS 명령으로 인증된 계정으로 명령을 실행하면 가능할 것으로 예상이 됩니다.

 

현재까지 성공했다면 적어도 TFSService 계정으로 Team Foundation Server 에 접속을 할 수 있습니다. 드디어 Team Explorer 로 소스 제어의 최신 소스 코드를 다운로드 받을 수 있게 되었습니다. ^___^

Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 이동엽 2020.12.04 15:48 Address Modify/Delete Reply

    혹시 TFS 백업하는 방법 쉽게 알려주실수 있으신가요?

지난 6월 10일 VSTS 2010 팀에서 세미나를 진행하였습니다. 세미나 프레젠테이션은 MEF 세미나 자료 에서 볼 수 있습니다.

그리고 얼마 전에 촬영한 동영상도 공개가 되었습니다. VSTS 2010 은 굉장히 큰 규모의 개발 도구, 개발 플랫폼 등의 버전 업으로 아직도 많은 부분을 알려드리지 못했고, 미처 저희들도 모두 알지 못하는 부분도 많습니다.

하지만 남들보다 먼저 접해본 분야이고 이것을 알려드리기 위해 진행한 세미나입니다. 아래의 동영상을 시청하시고 VSTS 2010 에 많은 관심을 가져주세요. ^^

   

강보람 - C# 연대기 - C# 의 Before/After

   

공성의 - VSTS 2010 의 소프트웨어 품질 관리

   

김병진님의 - VSTS 2010 Architecture & UML

   

   

엄준일 ASP.NET MVP - Managed Extensibility Framework

   

최흥배 C++ MVP - Visual C++ 10, C++0x 그리고 Concurrency Runtime

   

Posted by 땡초 POWERUMC

댓글을 달아 주세요

Microsoft.TeamFoundation.WorkItemTracking.Client 예외

몇 일전 팀원 중에 WorkItemTypeDeniedOrNotExistException 이 발생하였습니다. 예전에도 우리 회사 UX 디자이너에게도 이런 비슷한 문제가 발생했던터라 크게 당황하지는 않았습니다 ^^    

그 당시의 문제는 GAC 에 관련된 어셈블리가 설치되지 않았거나, 필요한 Version 이 일치하지 않는 문제입니다. 이번 경우도 마찬가지로 GAC 에 관련된 어셈블리가 존재하지 않는 문제입니다. 그래서 이전에는 이 문제를 제 컴퓨터에 설치된 최신 TeamFoundation 어셈블리를 복사하여 UX 디자이너의 컴퓨터에 GAC 로 인스톨하여 해결하였습니다.

그렇기 때문에 꼭 WorkItemTracking.Client 쪽 예외가 아니더라도 제대로 어셈블리가 설치 않은 경우라면 비슷한 오류는 발생할 수 있습니다.

   

예외 발생 문제 해결

대부분의 경우 이런 문제는 Visual Studio 2008 SP1 환경에서 발생하며, 개발자가 팀 탐색기를 설치하는 시점이 잘못되어 발생하는 문제입니다.

그럼 문제를 재연해 볼까요?

예외 발생 시나리오

  1. Visual Studio 2008 을 설치한다
  2. Visual Studio 2008 SP1 을 설치한다
  3. Team Explorer 2008 을 설치한다
  4. Team Explorer 를 사용하면서 위의 오류가 발생한다


 
예외 해결 시나리오

  1. Visual Studio 2008 을 설치한다
  2. Visual Studio 2008 SP1 을 설치한다
  3. Team Explorer 2008 을 설치한다
  4. Team Explorer 를 사용하면서 위의 오류가 발생한다
  5. 다시 Visual Studio 2008 SP1 을 설치한다
  6. 위의 오류가 더 이상 발생하지 않는다

 

Visual Studio 2008 SP1 이 설치된 Team Explorer 2008 SP1 의 어셈블리를 복사하여 GAC 에 등록해 주는 방법보다는 다시 Visual Studio 2008 SP1 을 설치하는 것이 훨씬 나을 것 같네요.

이런 문제는 Visual Studio 2008 SP1 을 설치한 후에 팀 탐색기를 설치하면 빈번하게 발생하는 문제이므로, 혹시 이런 문제가 발생하면 당황하지 말고 "Visual Studio 2008 SP1 을 다시 설치하세요!" 라고 조언해 주시길 바랍니다.

Posted by 땡초 POWERUMC

댓글을 달아 주세요

프로젝트 어느 아래와 같은 오류가 발생하였습니다. C++/CLI 연동하는 프로젝트였는데, 로컬 설정이 제대로 되지 않았던 이유로 우회적으로 Local Test 통해 UI 있는 화면을 띄우고 테스트를 진행하였습니다.

 

그러던 중에 아래와 같은 오류가 나네요.

 

    코드 검사 모음 오류: 컴퓨터에서 Visual Studio 성능 및 검사 로깅 엔진이 이미 실행되고 있으므로 테스트 실행을 계속할 수 없습니다. 보류 중인 성능 또는 코드 검사 세션을 닫은 다음 테스트를 다시 실행하십시오.

     

 

오류 재연

 

번의 시행 착오 끝에 오류를 재연하는 시나리오를 발견하게 되었습니다.

 

  1. UI 화면를 표시하는 테스트를 만든다
  2. 테스트 메서드가 종료되지 않도록 모달 창으로 띄운다
  3. 테스트를 디버그로 실행한다
  4. 모달 창을 닫지 말고 디버그로 종료한다 (또는 테스트 디버깅 브레이크 포인트가 활성화 되었을 )
    1. 다음 테스트 시에 위의 오류가 발생
    2.  
    3. 위의 테스트 오류가 발생하면 Visual Studio 다시 실행하면 해결이 되지만, 그렇게 하기에 매번 재실행 하는 시간이 많이 아깝네요.
    4.  
    5. 해결 방법
    6.  
    7. 문제는 아래의 블로그를 통해 문제의 해결 방법을 찾을 있습니다.

    1. 간단하게 VSPerfmon.exe 프로세스를 죽이라고 하네요
    2.  
    3. %ProgramFiles%\Microsoft Visual Studio 9.0\Team Tools\Performance Tools 폴더에 VSPerform.exe 파일이 존재하는데 녀석이 테스트 데이터를 수집하는 도구네요.

    Posted by 땡초 POWERUMC

    댓글을 달아 주세요

    실버라이트 프로젝트 생성하면서 하는 실수
     
    실버라이트 프로젝트는 두 가지를 제공합니다. “Silverlight 응용 프로그램” 과 “Silverlight 클래스 라이브러리” 두 가지의 프로젝트 타입을 제공합니다.
     
    저도 요즘 회사에서 실버라이트를 만지고 있는데, 매번 반복하는 실수가 있답니다. Silverlight Application 프로젝트를 만들려고 이름을 입력하고 엔터키를 누르면 Silverlight Class Library 프로젝트가 만들어 질 때가 있습니다. 가끔 무의식적으로 이런 실수를 반복하고 있답니다. ^^;
     
    [그림1] 실버라이트 프로젝트 생성 화면
     
    한번씩 실수로 프로젝트가 생성이 되면 매번 프로젝트가 생성된 폴더를 지워주어야 하고, 솔루션 파일이 변경이 되기 때문에 폴더에 락(Lock) 이 걸리는 경우도 있어 불편하더군요.
     
     
    실버라이트용 클래스 라이브러리와 응용 프로그램의 차이
     
    우선 두 프로젝트의 가장 큰 차이는 빌드 시에 .xap 파일로 패키징(Packaging) 을 하느냐 하지 않느냐가 가장 큰 외관적인 차이라고 할 수 있습니다. Silverlight Class Library 는 .DLL 로 Output 이 나오고, Silverlight Application 은 .XAP 으로 패키징(Packaging) 이 되죠.
     
    프로젝트의 속성에서도 차이를 보입니다.
     
    [그림2] 실버라이트 클래스 라이브러리 프로젝트 속성 화면
     
    [그림3] 실버라이트 응용 프로그램 프로젝트 속성 화면
     
    보시다시피 출력 어셈블리나 내용(Contents) 를 패키징(Packaging) 의 여부가 바로 가장 큰 차이라고 할 수 있습니다.
     
     
    실버라이트용 클래스 라이브러리 프로젝트를 응용 프로그램으로 변경하기
     
    가끔씩 실수로 잘못 생성된 Silverlight Class Library 를 Silverlight Application 프로젝트로 변경하기 위해서 몇 가지 작업만 해주면 됩니다.
     
    Silverlight Class Library 의 .csproj 파일을 열어 아래의 그림의 XML Element 를 추가해 줍니다.
     
    [그림4] Silverlight Application 프로젝트로 변환 방법
     
    그리고 [그림4] 와 같이 XML Element 를 추가합니다. XapOutputs 와 XapFilename 만 적절히 넣어주시면 됩니다. 만약 프로젝트 속성 화면에서 이 값을 편집 가능하게 하고 싶다면, SilverlightApplication 의 Value 값을 True 로 변경해주기만 하면 됩니다.
     
    그럼 이후 빌드부터 Output 은 .DLL 을 .XAP 으로 패키징(Packaging) 하게 된답니다.
     
     
    간단하지만 복잡한 내부 원리
     
    Project Type
    Visual Studio 는 다양한 형태의 프로젝트를 지원합니다. 예를 들어, C#, VB.NET 으로 개발할 수 있는 프로젝트가 있고, 설치(Setup)프로젝트 나 SQL Server 프로젝트 그리고 다양한 다이어그램(Diagram) 프로젝트를 제공합니다. 바로 이런 프로젝트 형식을 Project Type 이라고 합니다.
     
    Project Sub Type
    Project Sub Type 은 중요한 개념입니다. Project Sub Type 은 Project Type 의 파생 프로젝트 입니다. 우리가 C# 으로 Windows Forms, Web Forms, Silverlight 등을 개발할 수 있는 것도 바로 Project Sub Type 이 있기 때문입니다.
     
    Visual Studio 의 모든 구성 요소는 고유의 GUID 값을 가지고 있습니다. [그림4] 에서도 알 수 있듯이 Silverlight Project Sub Type 은 {A1591282-1198-4647-A2B1-27E5FF5F6F3B} 인 것을 알 수 있습니다. 그 뒤의 GUID 은 Language 의 GUID 입니다.
     
    이러한 Project Sub Type 은 Visual Studio 의 Project Factory 로 구현할 수 있으며, IVsProjectFactory 와 IVsPropertyPage를 구현하여 Flavored Project 를 만들 수 있습니다. 그리고 프로젝트의 추가적인 속성 값을 유지하기 위해 IVsProjectFlavorCfg, IPersistXMLFragment, IVsDeployableProjectCfg 등의 복합적으로 인터페이스를 구현해야 합니다.
     
    이러한 패키지(Package) 는 레지스트리(Registry) 의 고유의 GUID 값으로 저장되고 Visual Studio 에서 고유한 Project Sub Type 이 로드가 되면 다양한 빌드 방법 또는 프로젝트 관리 방법 등이 적용 됩니다. 그리하여 우리는 Visual Studio 에서 Silverlight 개발을 할 수 있게 됩니다.
     
    예를 들어, 이런 방법을 통해 Silverlight 프로젝트가 빌드 시에 .XAP 패키징 파일의 압축률 등을 선택하여 적용하게끔 할 수 있는 추가 구성 요소를 제공할 수도 있겠죠?
    Posted by 땡초 POWERUMC

    댓글을 달아 주세요

    실버라이트가 포함된 웹 어플리케이션 팀 빌드 오류 문제
     
    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

    댓글을 달아 주세요

    TFS 팀 포털에서 문서 라이브러리를 윈도우 탐색기로 열 수 없는 문제
     
    Sharepoint 에서는 Team Foundation Server 의 팀 포털(Team Portal) 사이트의 문서 라이브러리를 윈도우 탐색기로 열수 있는 기능을 제공합니다. 개인적으로 무척 유용하게 사용하는 기능입니다.
     
    하지만 특정 경우 또는 특정 환경에서 문서 라이브러리를 윈도우 탐색기로 열 수 없는 문제가 발생합니다. 문서 라이브러리를 윈도우 탐색기로 열려고 하면 아무런 오류 메시지나 응답이 없기 때문에 문제의 원인을 정확하게 판단하기 힘듭니다.
     
    [그림1] 윈도우 탐색기로 열어서 반응이 없음
     
     
    해결 방법
     
    아직 저도 자제한 문제의 원인을 모르겠습니다. 단지 추정만 하고 있지만 다양한 테스트를 할 수 있는 환경이 아니므로 해결 방법만 제공해 드리겠습니다.
     
    첫 번째, UNC(United Nations Charter) 경로로 팀 포털에 접근합니다.
     
    [그림2] UNC 경로로 팀 포털에 접근한다
     
    두 번째, UNC 경로로 팀 포털에 접근한 후에 [그림1] 과 같이 “윈도우 탐색기로 열기” 명령을 실행하면 윈도우 탐색기로 열립니다.
     
    [그림3] 이제 윈도우 탐색기로 잘 열린다

    Posted by 땡초 POWERUMC

    댓글을 달아 주세요

    TFS 의 성능 향상 팁입니다.
     
    저도 집에 금쪽 같은 Quad Core 에 빵빵한 메모리로 무장한 데스크탑이 있지만, 가상 머신에 OS 를 3개 띄우니 체감적으로 버벅 되니 데스크탑에 손이 잘 가지 않더군요. (혼자 쓰면서 별짓 다하죠. AD 까지 올려놨으니 -_-;)
     
    아래의 주소에서 TFS 의 성능 향상에 관한 팁이 좀 도움이 될까 하네요.
    다른건 몰라도 서버단에서 ASP.NET 의 캐싱 메모리를 올리는 방법이 젤 손쉽고 체감적이지 않을까 합니다.
     
    TFS Performance Tips & Tricks
     


    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

    댓글을 달아 주세요

    저희 닷넷엑스퍼트에서 TFS(Team Foundation Server) 호스팅 서비스를 오픈하였습니다. ‘이게 뭔소리여?’
    말 그대로 TFS 를 호스팅 해 주는 서비스랍니다.
     
    자사에 TFS 를 통한 ALM 를 도입을 고려하고 있다면 한번 관심을 가져볼 만한 서비스입니다.
    Visual Studio 와 Eclipse 를 지원 한답니다.
     
    [그림1] CodeSafe 의 TFS 호스팅의 장저
     
    비싼 초기 구매 비용과 AD 환경에서 TFS 설치 및 유지, 그리고 수많은 장애 문제에 컨설팅 및 기술력과 노하우를 갖추고 있다면 직접 사내에서 운영하는 것도 나쁘지 않겠군요 -_-;
    그렇지 않다면, 저희 CodeSafe 에 문을 똑똑 두드려 보는 건 어떨까요?
     

     
     
    서비스 운영이나 홈페이지, 블로그 등을 운영하기 위해 서버를 구매하여 서비스 환경을 구성한다는 건 돈 낭비, 시간 낭비, 인력 낭비!! ( 모든 경우는 아니겠지만요 ^^ )
     
    자! 이제 TFS 도 호스팅 시대가 현실로 다가왔습니다.

    [그림2] 초기 서비스 도입 비용
    Posted by 땡초 POWERUMC
    TAG ALM, CodeSafe, TFS

    댓글을 달아 주세요