Ответ 1
Вы можете использовать Product/@Version = "! (bind.FileVersion.FileId)" (замените FileId
на Id
файла, из которого вы хотите получить номер версии) и light.exe будет заполнять значение версией файла, на которую ссылается FileId
.
Я написал приложение и его установщик WiX и поместил его под контроль версии, используя subversion. Когда сборщик WiX собирается, я хочу, чтобы его номер версии был текущей версией приложения. Как это сделать? Я использовал С# для кодирования приложения.
N.B. Я использую ccnet для создания этого проекта
Вы можете использовать Product/@Version = "! (bind.FileVersion.FileId)" (замените FileId
на 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/
Здесь очень простой способ получить версию Bootstrapper Bundle Version в соответствии с вашей конфигурацией MyApp AssemblyVersion с помощью BeforeBuild Target
и DefineConstants
.
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/