2009-11-06 3 views
19

Я хочу включить динамическую часть в имя файла msi, который создаются моими проектами wix. Эта динамическая часть должна быть под контролем переменных, которые являются частью моего WIX проекта и заявлены как это:WIX: Howto динамически устанавливает имя выходного файла msi

<?define ProductVersion="7.1.0.1" ?> 

Кто-нибудь знает о способе отправки, что значение этой переменной WIX линкера, чтобы использовать его в качестве часть имени выходного файла?

Кстати: я использую Wix3

ответ

2

Поскольку это просто имя файла, почему бы не действие после сборки, переименовывает файл в сценарии сборки (предполагающей MSBuild)?

+0

Хорошо, это сработало бы. Я попробую это. Но я искал более прямой путь - или вы думаете, что это не поддерживается в wix? Я читал что-то о переменных-линкерах здесь: http://n2.nabble.com/Types-of-variables-question-td3825142.html ! (Wix.Name) получает так называемые WixVariables (может быть определен в исходном коде с элементом WixVariable или передан в командной строке света и/или , который горит таким же образом, как переменные препроцессора передаются свечи). Но это не работает. – Jan

+1

Я упомянул об этом, так как это самый быстрый и простой способ справиться с этим. Как и многие другие проблемы с разработкой, всегда помните KISS. –

+5

Переименование MSI - плохая идея. Не делай этого! http://blogs.msdn.com/b/robmen/archive/2004/12/08/278746.aspx – l33t

15

Имя файла msi не определяется вашими файлами wix, а коммутатором light.exe -out. Вы можете использовать то же самое значение для -out и внутри вашего WIX файлов, если вы выполните следующие действия в сценарии сборки, при условии, что это пакетный сценарий:

  • установить переменное окружение с set productversion=1.2.3
  • Pass -out foo%productversion%.msi к light.exe линкера
  • использовать то же переменные окружения в вашей WIX файлов в $(env.productversion)
-5
Product Id="GUID" Name="whatevername $(var.ProductVersion)" 
+0

Это определяет, как продукт отображается в разделе «Установка и удаление программ», а не имя файла MSI. – Rozwel

0

Нужны ли переменные в WiX? Я создаю свои двоичные файлы для установки из MSBuild, и я просто установил имя выходного файла MyProject_$(Platform). Я ожидаю, что любая замена переменных MSBuild будет работать одинаково хорошо.

35

Вы можете обновить OutputName вашего .wixproj и использовать переменную MSBuild для прохождения номера версии или любой другой переменной, которая вам нравится.

Мой сценарий сборки выглядит следующим образом:

set PRODUCTVERSION=7.1.0.1 
MSBuild.exe /p:Configuration=Debug /p:ProductVersion=%PRODUCTVERSION% Installer.wixproj 

И мой WiX проект выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform> 
    <ProductVersion>1.0.0.0</ProductVersion> 
    <ProjectGuid>{b7415c44-8d59-4ac2-b698-03e399a305e3}</ProjectGuid> 
    <SchemaVersion>2.0</SchemaVersion> 
    <OutputName>Installer.$(ProductVersion)</OutputName> 
    ... 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
    <OutputPath>bin\$(Configuration)\</OutputPath> 
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> 
    <DefineConstants>Debug</DefineConstants> 
    <WixVariables>ProductVersion=$(ProductVersion)</WixVariables> 
    </PropertyGroup> 
    ... 
</Project> 

Выход будет:

Installer.7.1.0.1.msi 
+2

Я думаю, что это лучший ответ всего на милю. – ostati

+1

Именно то, что я искал, спасибо! К сожалению, VisualStudio, похоже, не похож на ' $ (ProductName)' из коробки. Для меня было достаточно предоставить значение по умолчанию (в основном используется для сборки через VisualStudio человеком: ' ApplicationSetup') и передать реальное значение, описанное @Charlie (при запуске сервером сборки через msbuild). – CodeFox

+1

Это должен быть принятый ответ ... был именно тем, что мне нужно (плюс добавление от @CodeFox). – Jon

0

Если у вас есть несколько конфигурации чем в файле .wixprj, вы можете сделать следующее:

<OutputName Condition="'$(Configuration)' == 'User'">User.Setup</OutputName> 
<OutputName Condition="'$(Configuration)' == 'Designer'">Designerr.Setup</OutputName> 
1

Я нашел несколько больших опорные посты сделать именно эту операцию:

http://blog.tentaclesoftware.com/archive/2009/05/03/38.aspx

и Последующий с лучшим методом создания выходного файла, используя событие предварительной сборки:

http://blog.tentaclesoftware.com/archive/2010/08/05/99.aspx

Я знаю, что ссылки старые, но метод звук.

Вот основные шаги:

  • Помещенный версию вы хотите использовать в файл, который вы можете получить доступ из вашего проекта. Я использую основной исполняемый файл моей установки, потому что я также привязываюсь к этой версии в своих wxs. В моем случае, поскольку я строю с C# и использую SVN, у меня есть версия шаблона моего assembly.cs, assembly.cs.txt, который я запускаю subwcrev как событие pre-build для создания сборщика .cs, который получает скомпилированный в мой исполняемый файл (я действительно делаю это в отдельном проекте в своем решении). Subwcrev вставляет некоторую информацию о дате и ревизии, которую я использую для создания версии в форме «major.minor.version.0», где я использую «year.month.revision.0» для моей версии.

  • Теперь я обычно устанавливаю AssemblyFileVersion с помощью этого метода, но чтобы иметь возможность использовать мой номер версии в событии сборки wixproj, упомянутом в вышеприведенном сообщении, мне также нужно установить AssemblyVersion, так как это то, к чему можно получить доступ с помощью GetAssemblyIdentity. Этот метод был бы сомнительным, если бы я действительно использовал сборку, с кем-то другим, но для меня все в порядке, так как оно находится в моем конечном исполняемом приложении.

  • Выполните шаги, описанные во втором сообщении (в первом сообщении обсуждается использование метода привязки для версии в wxs и как выгрузить и отредактировать wixproj - ценный контекст для второго сообщения).

Работает как очарование!

Смежные вопросы