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, ' ')'
ContinueOnError="false"
WorkingDirectory="." />
<Exec
Command='"$(Wix)bin\light" -ext WixIISExtension -ext WixUIExtension -ext WixUtilExtension -ext WixSqlExtension -out "$(MsiOut)" @(WixObject, ' ')'
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가 변경되어야합니까? ... 이렇게하고 로컬 빌드를 손상시키지 않고 경로를 하드 코드하지 않는 방법이 있습니까?