如何将WiX安装程序版本设置为当前版本?

我写了一个应用程序和它的WiX安装程序,并使用subversion将其置于版本控制之下。 当WiX安装程序构build时,我希望它的版本号是应用程序的当前构build版本。 我如何做到这一点? 我用c#来编写应用程序。

NB我正在使用ccnet来build立这个项目

您可以使用Product / @ Version =“!(bind.FileVersion.FileId)”(将FileIdreplace为您想从中获取版本号的文件的Id ),并且light.exe将使用版本填充值由FileId引用的文件。

我通过编写一个预处理器扩展来从我的可执行文件中读取文件版本,从而在我的一个项目中做到了这一点。 所以WiX文件看起来像这样:

 <?define ProductName="$(fileVersion.ProductName($(var.MyApp.TargetPath)))" ?> <?define CompanyName="$(fileVersion.CompanyName($(var.MyApp.TargetPath)))" ?> <?define ProductVersion="$(fileVersion.ProductVersion($(var.MyApp.TargetPath)))" ?> <Product Id="<product ID>" Name="$(var.ProductName)" Version="$(var.ProductVersion)" Manufacturer="$(var.CompanyName)" Language="1033" UpgradeCode="<upgrade code>"> 

我已经在CodePlex上发布了代码: http : //wixfileversionext.codeplex.com/

这里有一个非常简单的方法,使用一个BeforeBuild TargetDefineConstants来让你的Bootstrapper Bundle版本匹配你的MyApp AssemblyVersion。

Bundle.wxs:

 <Bundle Name="$(var.ProductName) Bootstrapper v$(var.BuildVersion)" Version="$(var.BuildVersion)" 

Bootstrapper.wixproj:

 <Target Name="BeforeBuild"> <GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe"> <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> </GetAssemblyIdentity> <PropertyGroup> <DefineConstants>BuildVersion=%(AssemblyVersion.Version)</DefineConstants> </PropertyGroup> </Target> 

如果有人正在寻找一个真正的XML示例,这可以在.NET程序集中工作(并且不需要执行Assembly或KeyPath属性)。 我删除了与地点持有人无关的代码:

 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product [...] Version="!(bind.fileVersion.MyDLL)"> [...] <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder" Name="PFiles"> <Directory Id="INSTALLDIR" Name="MyDLLInstallLocation"> <Component Id="MainLib" Guid="[...]"> <File Id="MyDLL" Name="MyDll.dll" Source="MyDll.dll" /> [...] </Component> [...] </Directory> </Directory> </Directory> </Product> </Wix> 

这看起来相当接近你想要完成的。 看看相当于巡航控制系统。

http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/