2010-07-20 4 views
0

모든 테스트 어셈블리와 종속성 및 구성 파일을 단일 폴더에 수집해야합니다. 프로세스는 각 테스트 프로젝트의 출력에서 ​​디렉토리 구조를 보존해야합니다. 우리는 테스트 프로젝트를 마스터 프로젝트에 수동으로 부착해야하는 솔루션을 가지고 있지만, 우리 솔루션은 유지 보수가 가능한 프로젝트가 너무 많습니다. 이들은 명명 규칙 (x.UnitTest.csproj, y.IntegrationTest.csproj)에 따라 자동으로 위치해야합니다.동적으로 생성 된 프로젝트 집합의 출력을 단일 폴더로 집계하는 방법

백그라운드에서 에이전트간에 아티팩트 (바이너리 등)를 전달하는 빌드 시스템으로 작업하고 있습니다. 우리는 하나의 에이전트에서 컴파일하고 다른 에이전트에서 테스트합니다. 테스트 프로젝트간에 어셈블리를 대규모로 복제하면 빌드 프로세스가 느려지 게됩니다.

내가 수행 한 작업 : 1) 대부분의 테스트 프로젝트를 참조하는 csproj가 있습니다. 바이너리와 의존성을 하나의 폴더로 가져옵니다. RebaseOutputs는 속성의 OUTDIR 속성을 오버라이드 (override) : 2) 나는

  • MSBUILD 작업 등 내가 가장 눈에 띄는 일을 시도했습니다이

    <CreateItem 
        Include="%(ProjectReference.RootDir)%(ProjectReference.Directory)$(OutDir)*.config"> 
    <Output TaskParameter="Include" ItemName="TestConfigurationFiles"/> 
    </CreateItem> 
    
    <Copy 
         SourceFiles="@(TestConfigurationFiles)" 
         DestinationFolder="$(OutDir)"> 
    </Copy> 
    

    를 사용하여 복사 할 모든 파일을 식별 할 수 있어요. 동적으로 생성 된 출력 집합과 함께 msbuild 작업을 제공 할 수 있지만 기본 폴더에서만 빌드 할 수 있습니다. MSBuild에서 태스크의 TargetOutputs에

  • 후킹 ( 의존성)없이 단지 주 출력 조립체를 제공한다.

  • 구성 파일의 경우 "항상 복사"로 실험했습니다. 이로 인해 은 종속 프로젝트의 출력 디렉터리에 최종 프로젝트가 아닌 "dllname.config"가 아닌 "app.config"로 표시됩니다. 이 더 나은 만들 수

솔루션

  • 컴파일하기 전에, 동적 projectreference 항목 배열에 추가하는 예제를 제공 포함될 수 있습니다.

  • msbuild TargetOutputs를 사용하면 폴더의 모든 파일 목록 (기본 출력 대신)을 만들고 대상 폴더에 복사 할 수 있습니다.

오늘 저는 msbuild 3.5를 사용하고 있습니다. 이상적으로 솔루션은 msbuild 3.5에서 작동합니다. .NET 4/MsBuild 4로 곧 전환 할 예정이므로 .Net 4에서 수행해야하는 경우에는 문제가 없습니다.

답변

0

이슈를 내보낼 때 폴더 구조를 평평하게 만들었습니까? 같은

뭔가 :

src/*.UnitTest*/bin/**/*.* -> /testlibs 
src/*.IntegrationTest*/bin/**/*.* -> /testlibs 
+0

나는 폴더 구조를 유지해야합니다. – Precipitous

관련 문제