2015-01-21 11 views
0

TFS에서 CI 빌드를 설정하고 있습니다. 팀원 개발자는 .wixproj 파일을 언로드하여 ('숨김'이기 때문에) msbuild 정의를 편집하는 것을 좋아하지 않으며 I 종류가과 일치합니다.TFS2012 WIX 빌드 및 상대 경로

msbuild /t:Build;PublishWebsite;Harvest;WIX setup.build 

내용이있는 다음과 같습니다 :이 로컬 컴퓨터에 절대적으로 잘 작동

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebSiteSource>..\InstoreApplications\</WebSiteSource> 
    <SetupF>..\Setup\</SetupF> 
    <PublishF>publish\</PublishF> 
    <Publish>$(SetupF)$(PublishF)</Publish> 
    <WebSiteContentCode>WebSiteContent.wxs</WebSiteContentCode> 
    <WebSiteContentObject>WebSiteContent.wixobj</WebSiteContentObject> 
    <!--<MsiOut>bin\\Release\\INT SMK Coles Store WebApi 1.0.1.msi</MsiOut>--> 
    <MsiName>INT SMK Instore Applications 1.0.2.msi</MsiName> 
    <MsiOut>bin\Release\$(MsiName)</MsiOut> 
    </PropertyGroup> 

    <!-- Defining group of temporary files which is the content of the web site. --> 
    <ItemGroup> 
    <WebSiteContent Include="$(WebSiteContentCode)" /> 
    </ItemGroup> 

    <!-- The list of WIX input files --> 
    <ItemGroup> 
    <WixCode Include="Product.wxs" /> 
    <WixCode Include="$(WebSiteContentCode)" /> 
    <WixCode Include="WebAPIDlg.wxs" /> 
    <WixCode Include="IISConfiguration.wxs" /> 
    <WixCode Include="WixUI_InstallDirNoLicense.wxs" /> 
    </ItemGroup> 

    <!-- The list of WIX after candle files --> 
    <ItemGroup> 
    <WixObject Include="Product.wixobj" /> 
    <WixObject Include="$(WebSiteContentObject)" /> 
    <WixObject Include="WebAPIDlg.wixobj" /> 
    <WixObject Include="IISConfiguration.wixobj" /> 
    <WixObject Include="WixUI_InstallDirNoLicense.wixobj" /> 
    </ItemGroup> 

    <!-- Define default target with name 'Build' --> 
    <Target Name="Build"> 
    <!-- Compile whole solution in release mode --> 
    <MSBuild 
     Projects="..\InstoreApplications.sln" 
     Targets="ReBuild" 
     Properties="Configuration=Release" /> 
    </Target> 

    <Target Name="PublishWebsite"> 
    <!-- Remove complete publish folder in order to 
      be sure that evrything will be newly compiled --> 
    <Message Text="Removing publish directory: $(SetupF)"/> 
    <RemoveDir Directories="$(SetupF)" ContinueOnError="false" /> 
    <Message Text="Start to publish website" Importance="high" /> 
    <MSBuild 
     Projects="..\\InstoreApplications\InstoreApplications.csproj" 
     Targets="ResolveReferences;_CopyWebApplication" 
     Properties="Configuration=Release;WebProjectOutputDir=$(Publish)\;OutDir=$(Publish)bin\;" /> 
    </Target> 
    <!-- Define creating installer in another target --> 
    <Target Name="Harvest"> 
    <!-- Harvest all content of published result --> 
    <Exec 
     Command='"$(Wix)bin\heat" dir $(Publish) -dr INSTALLDIR -ke -srd -cg ApplicationComponents -var var.publishDir -gg -out $(WebSiteContentCode)' 
     ContinueOnError="false" 
     WorkingDirectory="." /> 
    </Target> 
    <Target Name="WIX"> 
    <!--  At last create an installer --> 
    <Exec 
     Command='"$(Wix)bin\candle" -ext WixIISExtension -ext WixUtilExtension -ext WixSqlExtension -dpublishDir=$(Publish) -dMyWebResourceDir=. @(WixCode, &apos; &apos;)' 
     ContinueOnError="false" 
     WorkingDirectory="." /> 
    <Exec 
     Command='"$(Wix)bin\light" -ext WixIISExtension -ext WixUIExtension -ext WixUtilExtension -ext WixSqlExtension -out "$(MsiOut)" @(WixObject, &apos; &apos;)' 
     ContinueOnError="false" 
     WorkingDirectory="." /> 

    <!-- A message at the end --> 
    <Message Text="Install package has been created." /> 
    </Target> 
    <!-- Optional target for deleting temporary files. Usually after build --> 
    <Target Name="DeleteTmpFiles"> 
    <RemoveDir Directories="$(Publish)" ContinueOnError="false" /> 
    <RemoveDir Directories="$(SetupF)" ContinueOnError="false" /> 
    <Delete Files="@(WixObject);@(WebSiteContent)" /> 
    </Target> 

</Project> 

그래서 그는 함께 자신이 호출하는 별도의 setup.build 파일을 만들었습니다.

TFS 빌드의 경우 빌드 정의에서 setup.build 파일을 직접 참조하고 "고급/MSBuild 인수 ..."에서 "/ t : Build; PublishWebsite; Harvest; WIX"를 전달합니다. 그러면 '성공 '하지만 빌드는 MSI를 더 이상 생성하지 않습니다. 내가 문제를 생각

는 변수에 유의 파일과 WIX이 파일을 따기의 열 발생 사이 :

<SetupF>..\Setup\</SetupF> 
<PublishF>publish\</PublishF> 
<Publish>$(SetupF)$(PublishF)</Publish> 

열 명령 가에있는 파일과 폴더를 생성 않습니다 서버를 빌드하면 폴더는/bin 대신/src로 끝나고 논리적으로는 로컬로 빌드하는 것과 같습니다.

경로가 상대 경로이므로 나는 WIX 촛불 및/또는 ligh를 추측하고 있습니다. t 명령은 WorkingDirectory가 변경되어야합니까? ... 이렇게하고 로컬 빌드를 손상시키지 않고 경로를 하드 코드하지 않는 방법이 있습니까?

답변

0

예, TFS 팀 빌드 (documentation 참조)와 비교하여 속성이 데스크톱 빌드에서 다른 값을 사용하도록하려면 조건을 사용하십시오.

스크립트가 Visual Studio 내에서 실행되는 경우 BuildingInsideVisualStudio MSBuild 속성을 확인하십시오.

TFS 20102에서는 일반적으로 빌드 워크 플로를 MSBuild 스크립트 워크 플로 변수 (예 : Pass Relative Path Arguments to MSBuild in TFS2010 Team Build)로 전달하도록 사용자 지정합니다. TFS 2013에는 많은 유용한 환경 속성이 있으므로 훨씬 쉬울 것입니다 (documentation 참조).