Как я могу установить версию установщика WiX на текущую версию сборки?
Я написал приложение и его установщик WiX и поставил его под контроль версий с помощью subversion. Когда установщик WiX строит, я хочу, чтобы его номер версии был текущей версией сборки приложения. Как мне это сделать? Я использовал c# для кодирования приложения.
N. B. Я использую ccnet для создания этого проекта
5 ответов:
вы можете использовать продукт / @Version="!(связывать.Необязательный параметр.Идентификатор файла)" (замените
FileIdсIdфайла, из которого вы хотите получить номер версии) и свет.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/
в случае, если кто-то ищет фактический пример XML, это работает с сборками .NET (и вам не нужно делать атрибуты сборки или 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>
вот очень простой способ получить версию пакета Bootstrapper, чтобы соответствовать вашей сборке MyApp с помощью
BeforeBuild TargetиDefineConstants.пакета.wxs:
<Bundle Name="$(var.ProductName) Bootstrapper v$(var.BuildVersion)" Version="$(var.BuildVersion)"загрузчика.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>
Это выглядит довольно близко к тому, что вы пытаетесь достичь. Посмотрите, что эквивалентно в круиз-контроле.
http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/
Comments