2010-01-16 7 views
2

우리 팀은 현재 ASP .NET 웹 사이트에서 작업하고 있습니다. 우리는 TFS2008을 소스 제어에 사용하는 조직의 첫 번째 팀 중 하나입니다. 내가 프로젝트에 가입했을 때, 그것은 이미 몇 달 동안 활동적이었습니다.TFS 프로젝트 구조로 인해 간단한 작업이 어렵습니다.

$/TfsProject/ 
| 
| /* Contains our in-house class libraries. */ 
|-- Common/ 
| | 
| |-- Extensions/ 
| | |-- Extensions.csproj 
| | 
| |-- Loggers/ 
|  |-- Loggers.csproj 
| 
| /* Contains third-party libraries. */ 
|-- Library/ 
| | 
| |-- EnterpriseLibrary/ 
|  | 
|  |-- v4.1/ 
|   |-- Microsoft.Practices.EnterpriseLibrary.Common.dll 
| 
| /* Contains the website itself. */ 
|-- Site/ 
    | 
    |-- Packages/ 
    | |-- Packages.csproj 
    | 
    |-- Website.root/ 
     | 
     |-- Website/ 
      |-- Website.sln 
      | 
      |-- Website/ 
      | |-- Website.csproj 
      | |-- Default.aspx 
      | 
      |-- WebsiteUnitTests/ 
      | |-- WebsiteUnitTests.csproj 
      | 
      |-- WebsiteWebControls/ 
      | |-- WebsiteWebControls.csproj 
      | 
      |-- Utilities/ 
       |-- Utilities.csproj 

주요 웹 사이트 솔루션 (Website.sln)는 현재 (그림에 표시된 .csproj 각 파일 포함) 다섯 개 프로젝트가 포함 : 다음은 우리가 TFS에서 사용하는 기본 파일 구조의 도면이다. 어쨌든 Common 디렉토리에 포함 된 프로젝트를 자체 솔루션으로 옮겨야한다는 결정이 내려졌습니다. 프로젝트 자체 대신 컴파일 된 DLL을 참조하여 프로젝트를 웹 사이트에 포함시켜야합니다. Common 프로젝트 중 하나를 업데이트 할 때마다이를 사용하는 다른 모든 프로젝트는 최소한의 노력으로 최신 버전을 사용해야합니다.

현재 계층 구조를 기반으로 구현하기 쉬운 방법이 있습니까? TFS patterns & practices 가이드를 읽었으나 그 제안을 구현하려면 중요한 변경 사항 (모든 프로젝트 및 솔루션 업데이트)이 필요합니다. 또한 TFS2010이 출시 될 때까지 팀 구성을 활성화하기 위해 대기 중입니다. 따라서 팀 빌드를 사용할 수 없습니다. (": \ 임시 \ DLL을 C"), 보다는 각 지역/bin 폴더 작동 할 수

답변

2

"이동식"솔루션은 공유 프로젝트/솔루션을 위해 특별히 빌드하는 것이 좋습니다.이러한 빌드의 마지막 단계는 바이너리를 게시 폴더 (아마도/libraries 아래에 있음)로 체크인하는 것입니다. 클라이언트 프로젝트 (바이너리를 참조하는 프로젝트)에 대한 최신 정보를 얻으면 결국 최신 바이너리를 가져옵니다. 클라이언트 프로젝트를 분기 할 수있는 능력을 잃지 않으며 팀 멤버는 원하는대로 폴더를 매핑 할 수 있습니다.

전체적으로 말해서 폴더 구조를 재고해야합니다. 그것은 매우 유연한 분기 구조를 허용하지 않습니다. 역사적으로 많은 VSS 사용자와 마찬가지로 TFS 저장소를 사용하고있는 것처럼 보입니다. 버전 관리 된 파일 시스템입니다.

+0

두 지점 모두에 동의합니다. 그 밖의 것이 없다면 Common + Library + Site를 한쪽 부모 밑으로 이동하십시오. 그렇지 않으면 새로운 팀 프로젝트를 만들지 않고도 코드를 분기 할 수 없습니다. –

+0

나는 과거에 분지를 길렀지 만, 일을 더 복잡하게 만들 것이라는 합의에 도달했습니다. –

+0

분기는 실제로 팀과 개인 선택 둘 다가되어야하지만 이해합니다. 아주 작은 일들은 그렇게하기를 원하는 사람들에게 매우 쉽게 분기를 가능하게 만들 수 있습니다. 팀 구성원은 개인 생산성을 위해 분기하는 개인의 영향을받지 않습니다. –

1
  • 해결책은 에 같은 디렉토리를 공통의 프로젝트의 모든 출력을하는 것입니다.

  • 그런 다음이 디렉토리를 웹 프로젝트 솔루션 에 추가 할 수 있습니다. DLL 파일에 대한 참조는 모두 TFS에서 가져온 일반 폴더에 대해 이어야합니다.

  • 해당 디렉터리는 TFS에 폴더로 추가 할 수 있습니다. 팀에있는 모든 사람은 폴더에 에 로컬로 동일한 상대 경로 을 솔루션 파일에 매핑해야합니다.

  • 은 "최소한의 노력은" 조각 분해 장소는 파일 이 컴파일 할 때/아웃 체크해야 할 것입니다. 팀 나머지 부분은 다음 GetLatest해야합니다. 중간에있는 동안에는 변경을 원하지 않으므로 GetLatest 요구 사항이 실제로 더 좋을 수 있습니다.

기본적으로 웹 프로젝트 솔루션에 추가 된 컴파일 된 dll이있는 폴더가 있습니다. 이것은 또한 모든 공용 dll이 빌드 된 것과 동일한 폴더입니다. 이 폴더는 웹 솔루션의 모든 프로젝트가 Common Dlls를 참조하는 곳입니다. someon이 다시 빌드되면 폴더의 dll을 체크 아웃하고 빌드 한 다음 다시 체크인해야합니다. 개발자가 최신 정보를 원하면 폴더의 GetLatest를 호출하고 프로젝트를 다시 빌드해야합니다.

이것은 실제로 우리가 참조 할 수 있도록 dll을 컴파일 한 유사 상황에서 작동했습니다. 우리와의 차이점은 컴파일 된 dll 파일이 너무 드문 드문 분개되어 전체 "GetLatest"패러다임이 결코 작동하지 않는다는 것입니다.

관련 문제