5

100 개가 넘는 프로젝트가있는 솔루션이 있습니다. 빌드하는 데 오랜 시간이 걸리며 때로는 Visual Studio가 빌드 중에 충돌합니다. 이 문제를 어떻게 처리하고 고통을 최소화 할 수 있습니까? 우리는 끔찍하게, 어딘가 잘못 갔습니까?100 개가 넘는 프로젝트로 구성된 솔루션은 빌드하는 데 5 분 이상 걸립니다.

문제에 대한 몇 가지 배경 : 우리는 WPF와 CAB를 사용하고, 각 모듈은 UI를 조립 정말 데이터베이스에 대한 단지 계층 인 "서버"어셈블리를 가지고

. 약 5 명의 개발자가있는 단 하나의 팀이 있습니다.

클래스의 수 또는 코드의 줄 수를 알 수 없습니다.

+1

왜 명령 줄 대안을 사용하지 않습니까? – vpram86

+2

프로젝트 당 몇 개의 클래스가 있습니까? 몇 줄의 코드가 합쳐 졌습니까? 얼마나 많은 개발자/팀이 있습니까? 얼마나 자주 각 프로젝트가 변경됩니까? – ChrisW

+7

100 개 프로젝트를 재건하는 데 5 분이 걸리지 않는 것이 무엇입니까? 재건축만큼 오래 걸리지 않아야합니다. –

답변

9

귀하의 질문에 조금 부족합니다,하지만 난 그냥 워크 스테이션 리소스 문제가 무엇보다 충돌 추측. 100 개의 프로젝트는 그만큼 많은 이유가있는 한 그 자체로 문제가되지 않지만 10 개가 넘는 프로젝트에 도달 할 무렵에는 일종의 관리 구조가 있기를 바랍니다.

항상 100 개 프로젝트를 모두 구축해야합니까? 구성 관리자를 사용하여 빌드 할 개별 프로젝트의 전원을 끌 수 있으며 총 프로젝트 수의 하위 집합으로 솔루션 파일을 만들 수 있습니다.

예를 들어 우리는 함께 일하는 엔터프라이즈 응용 프로그램 중 하나에 36 개의 프로젝트가 있습니다. 이와 함께 우리는 devs가 응용 프로그램의 주어진 하위 구성 요소로 작업하기 위해 필요한 프로젝트와 구성 만로드 할 수 있도록 여러 개의 솔루션 파일과 구성을 가지고 있습니다. 즉, 그들은 36 개의 프로젝트 중 일부만로드합니다. 빌드 서버는 모든 것을 함께 처리합니다.

응용 프로그램에 대해 분석하고 통합 할 수있는 항목과 다른 솔루션 파일로 분할 할 수있는 항목을 찾아 보는 것이 좋습니다.

+0

종속성 평가는 솔루션에서 더 많은 프로젝트를 수행하는 데 시간이 오래 걸립니다. 여러 솔루션 또는 구성을 사용하면 도움이 될 수 있습니다. 메시지 로깅을 줄이면 오류 만보고됩니다. 콘솔에서는 느린 작업이 다소 느리게 기록됩니다. – DaveE

+0

종속성 평가에 대해 자세히 설명해 주시겠습니까? – MedicineMan

+0

누군가 공유 구성 요소의 서명을 변경하면 어떻게됩니까? 프로젝트를 모두로드하지 않았기 때문에 솔루션에서 빌드가 실패하지 않습니다. – MedicineMan

1

솔루션 탐색기에서 개별 프로젝트를 마우스 오른쪽 단추로 클릭하고 해당 프로젝트 만 빌드 할 수있는 옵션을 선택할 수 있습니다. 빌드 순서에 필요한 프로젝트가 있으면 빌드도 완료되지만 필요한 항목 만 빌드 할 수 있습니다.

2

그들은 모두 동시에 빌드해야합니까? 그렇지 않은 경우 Configuration Manager에 들어가서 현재 필요한 빌드 만 선택하면됩니다.

솔루션에 포함 된 100 개의 프로젝트가 꽤 나을 것 같지만. 이게 정말 필요한가요? 소규모의 관련 솔루션으로 분해 할 수 있습니까? 아니면 서로 상호 의존적 인이 많은 프로젝트가 있습니까?

+0

문제는 개발자들이 서명을 변경할 수 있습니다. 그러면 사용자 지정 솔루션에로드되지 않은 프로젝트가 빌드되지 않습니다. 나는 이것이 지속적인 통합으로 처리 될 수 있다고 생각하지만, 아직까지 이것을 수행하지 않았다. – MedicineMan

3

귀하의 질문은 귀하의 솔루션 디자인과 관련이 없으며 100 개 프로젝트를 처리 할 수있는 VS의 능력과 관련이 적은 것으로 보입니다. 솔루션에 오랜 시간이 걸린다는 사실을 알고 싶다면 "잘못 설계된 거룩한 쓰레기"에 대한 코드 냄새입니다. 당신이 한 경우

는 "UI"어셈블리 및 "서버"어셈블리 사이 1 관계를, 그들은 논리적으로 동일하고 결합 될 수 있습니다.

CAB/CAG 모듈 어셈블리가 내 의견으로는 하나의 어셈블리에 모든 종속성을 가지고 있어도 좋습니다. 여러 모듈에서 데이터 액세스 코드를 공유하려는 경우 별도의 어셈블리로 분리하는 것이 좋습니다.이 방법은 적합하지 않은 결정하는 경우

, 우리가 일반적으로 할 것입니다 은 우리가 개발하는 동안 로컬 함께 몇 가지 관련 모듈을 테스트 할 수있는 몇 가지 작은 솔루션을 가지고 있지만 하나 개의 큰 솔루션 우리의 빌드를 가지고 서버는을 빌드합니다. 이렇게하면 빌드 시간이 오래 걸릴 수 있습니다. 로컬 빌드 박스가 아닌 전용 빌드 머신을 사용합니다 (이는 프로젝트 중 가장 작은 경우에도 좋은 방법입니다).

+0

나는 당신이 옳다고 생각한다. 나는 코드 냄새에 대해 질문하고 있다고 생각한다. 나는 지금까지 이것을 깨닫지 못했다. – MedicineMan

+0

다른 것을 말할 수 있습니다. 모듈이 자율적이지 않은 경우 (즉, 모듈을 삭제할 수없고 쉘과 다른 모든 모듈을로드 할 수없는 경우) 제대로 설계되지 않은 모듈입니다. 모듈은 가능한 한 독립적이어야합니다. ModuleDependencies가 적절할 때가 있지만 그 수가 적을수록 좋습니다. –

0

기본 솔루션 구성 디버그 및 릴리스는 항상 모든 프로젝트를 검사하고 최신 상태가 아닌 프로젝트를 빌드합니다. 검사 할 필요가 없다는 것을 알고있는 프로젝트의 빌드 옵션을 사용하지 않도록 설정하는 자체 솔루션 구성을 만들 수 있습니다.

관련 문제