如何将WiX安装程序版本设置为当前版本?
我写了一个应用程序和它的WiX安装程序,并使用subversion将其置于版本控制之下。 当WiX安装程序构build时,我希望它的版本号是应用程序的当前构build版本。 我如何做到这一点? 我用c#来编写应用程序。
NB我正在使用ccnet来build立这个项目
您可以使用Product / @ Version =“!(bind.FileVersion.FileId)”(将FileId
replace为您想从中获取版本号的文件的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 Target
和DefineConstants
来让你的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/