2009-10-27 2 views
1

내 TFSBuild.projMSBuild를 일괄 처리 - 나는를 실행하는 BeforeCompile 목표를 오버라이드 (override) 할

<ItemGroup> 
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../ProjectA/ProjectA.sln" /> 
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x64 Installer/x64 Installer.sln" Condition="'$(Platform)' == 'x64' " /> 
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x86 Installer/x86 Installer.sln" Condition="'$(Platform)' == 'x86' " /> 
    <ConfigurationToBuild Include="Release|x86"> 
     <FlavorToBuild>Release</FlavorToBuild> 
     <PlatformToBuild>x86</PlatformToBuild> 
    </ConfigurationToBuild> 

    <ConfigurationToBuild Include="Release|x64"> 
     <FlavorToBuild>Release</FlavorToBuild> 
     <PlatformToBuild>x64</PlatformToBuild> 
    </ConfigurationToBuild> 
</ItemGroup> 

이 같은 뭔가를 대상 일부 솔루션 만 실행에 도착하는 방법을 알아낼 수 없습니다 내가 작성한 커스텀 태스크. 사용자 정의 작업은 ProjectA의 출력을 가져 와서 두 설치 프로젝트 (Wix 프로젝트 파일)에서 사용하는 파일을 빌드합니다. 두 개의 SolutionToBuild 항목에 대해서만 실행하도록 BeforeCompile 대상을 얻는 방법은 무엇입니까? 이 작업은 목표 일괄 처리에 대한 것으로 가정합니다 (작업에 조건을 사용할 수는 있지만 얻을 수 없기 때문에).

작동 여부를 확인하기 위해 이와 같은 내용을 추가하려고 시도했지만 첫 번째 해결 방법 만 출력됩니다. 로그에 :

<Target Name="BeforeCompile" Outputs="%(SolutionToBuild.Identity)"> 
    <Message Text="Solution being built: %(SolutionToBuild.Identity)" /> 
</Target> 
+0

Ok - 솔루션마다 실행되는 BeforeCompileSolution 작업을 찾았지만 솔루션을 식별하는 유일한 방법은 솔루션의 전체 경로 및 파일 이름 인 $ (솔루션)이며 직접 비교하지 않습니다. '$ (BuildProjectFolderPath) /../../ x86 Installer/x86 Installer.sln' –

답변

3

왜 PROJECTA를 컴파일하고 실제 윅스 설치를 구축하기 전에 필요한 파일을 준비하지 않는

<ItemGroup> 
     <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x64 Installer/x64 Installer.sln" Condition="'$(Platform)' == 'x64' " /> 
     <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x86 Installer/x86 Installer.sln" Condition="'$(Platform)' == 'x86' " /> 
     <ConfigurationToBuild Include="Release|x86"> 
       <FlavorToBuild>Release</FlavorToBuild> 
       <PlatformToBuild>x86</PlatformToBuild> 
     </ConfigurationToBuild> 

     <ConfigurationToBuild Include="Release|x64"> 
       <FlavorToBuild>Release</FlavorToBuild> 
       <PlatformToBuild>x64</PlatformToBuild> 
     </ConfigurationToBuild> 
</ItemGroup> 

<Target Name="BeforeCompile"> 
    <MsBuild Projects="$(BuildProjectFolderPath)/../../ProjectA/ProjectA.sln"/> 
    <CallTarget Targets="PrepareWiXFiles"/> 
</Target> 

당신은 더러운 이름을 점검 할 필요가 없습니다 그 방법을? .

훨씬 나은 접근 방법은이 빌드를 여러 개의 작은 빌드로 분할하여 유지 보수성을 향상시키는 것입니다. 예를 들어, ProjectA를 빌드하고 출력을 네트워크 위치 (또는 로컬 위치)에 저장할 빌드를 하나 만들 수 있습니다. 그런 다음 ProjectA에서 출력을 수집하는 두 번째 빌드를 만들어 WiX 파일을 준비하고 Wix Installer를 빌드합니다.

희망이 도움이됩니다.

+0

그게 내가 원하는 것을 성취 할 수있는 완벽한 방법입니다. –

+0

이것이 원래 나왔던 것보다 효과적이었습니다. –

관련 문제