Как я могу установить версию установщика WiX на текущую версию сборки?



Я написал приложение и его установщик WiX и поставил его под контроль версий с помощью subversion. Когда установщик WiX строит, я хочу, чтобы его номер версии был текущей версией сборки приложения. Как мне это сделать? Я использовал c# для кодирования приложения.



N. B. Я использую ccnet для создания этого проекта

574   5  

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

    Ничего не найдено.