Как включить выход проекта, зависящий от конфигурации, в WiX 3.6

Мне интересно, как включить вывод проекта, зависящий от конфигурации, в WiX Setup Project? Например, давайте посмотрим на решение Visual Studio с одним приложением .NET и одним проектом установки Wix.

Я добавил ссылку на приложение .NET в проект установки и создал компонент в источнике установки:

  <Component Guid="EB0CBC32-5AE5-41B3-A343-FEBE044AC30A">
    <File Source="$(var.MyApp.TargetPath)" KeyPath="yes"/>
  </Component>

Итак, я ожидаю, что WiX будет включать выпуск версии MyApp в свой выпуск setup msi, а отладочную версию - в msi отладки соответственно. В противном случае ссылка на результаты проекта для меня не имеет смысла.

Но всегда есть отладочная версия. Что я делаю неправильно?

ОБНОВЛЕНИЕ.

Вот командная строка свечи из окна вывода VS:

------ Перестройка Все запущено: Проект: MySetup, Конфигурация: Выпуск x86 ------
C: \ Program Files \ WiX Toolset v3.6 \ bin \ свеча. exe -d "DevEnvDir = C: \ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \" -dSolutionDir = D: \ Projects \ Research \ Wix_ProjectOutput \ -dSolutionExt = .sln -dSolutionFileName = Wix_ProjectOutput.sln -dSolutionName = Wix_ dSolutionPath = D: \ Projects \ Research \ Wix_ProjectOutput \ Wix_ProjectOutput.sln -dConfiguration = Release -dOutDir = .. \ Release \ -dPlatform = x86 -dProjectDir = D: \ Projects \ Research \ Wix_ProjectOutput \ MySetup \ -dProjectExt =. dProjectFileName = MySetup.wixproj -dProjectName = MySetup -dProjectPath = D: \ Projects \ Research \ Wix_ProjectOutput \ MySetup \ MySetup.wixproj -dTargetDir = D: \ Projects \ Research \ Wix_ProjectOutput \ ReleaseExt. msi -dTargetName = MySetup -dTargetPath = D: \ Projects \ Research \ Wix_ProjectOutput \ Release \ MySetup.msi -dMyApplication.Configuration = Debug -d "MyApplicati on.FullConfiguration = Debug | x86 "-dMyApplication.Platform = x86 -dMyApplication.ProjectDir = D: \ Projects \ Research \ Wix_ProjectOutput \ MyApplication \ -dMyApplication.ProjectExt = .csproj -dMyApplication.ProjectExt = .csproj -dMyApplication. MyApplication -dMyApplication.ProjectPath = D: \ Projects \ Research \ Wix_ProjectOutput \ MyApplication \ MyApplication.csproj -dMyApplication.TargetDir = D: \ Projects \ Research \ Wix_ProjectOutput \ Debug \ -dMyApplication.exe. exe -dMyApplication.TargetName = MyApplication -dMyApplication.TargetPath = D: \ Projects \ Research \ Wix_ProjectOutput \ Debug \ MyApplication.exe -out obj \ Release \ -arch x86 Product.wxs

Почему для выпуска сборки MySetup использовалась отладочная конфигурация MyApplication ??

ОБНОВЛЕНИЕ 2.

И вот командная строка свечи при использовании msbuild из командной строки:

%windir%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe /verbosity:d /t:rebuild /fileLogger /p:Configuration=Release  Wix_ProjectOutput.sln 

In msbuild.log:

C: \ Program Files \ WiX Toolset v3.6 \ bin \ Candle.exe -d "DevEnvDir = Не определено, если создается не из Visual Studio" -dSolutionDir = D: \ Projects \ Research \ Wix_ProjectOutput \ -dSolutionExt = .sln -dSolutionFileName = Wix_ProjectOutput.sln -dSolutionName = Wix_ProjectOutput -dSolutionPath = D: \ Projects \ Research \ Wix_ProjectOutput \ Wix_ProjectOutput. : \ Projects \ Research \ Wix_ProjectOutput \ MySetup \ -dProjectExt = .wixproj -dProjectFileName = MySetup.wixproj -dProjectName = MySetup -dProjectPath = D: \ Projects \ Research \ Wix_ProjectOutput \ MySetup \ Myproget- Research \ Wix_ProjectOutput \ Release \ -dTargetExt = .msi -dTargetFileName = MySetup.msi -dTargetName = MySetup -dTargetPath = D: \ Projects \ Research \ Wix_ProjectOutput \ Release \ MySetup.msi -dMyApplication <-dMyApplication. > -d "MyApplication.FullConfiguration = Release | x86" -dMyApplication.Platform = x86 -dMyApplication.ProjectDir = D: \ Projects \ Researc h \ Wix_ProjectOutput \ MyApplication \ -dMyApplication.ProjectExt = .csproj -dMyApplication.ProjectFileName = MyApplication.csproj -dMyApplication.ProjectName = MyApplication -dMyApplication.ProjectPathlication MyApplication -dMyApplication. = D: \ Projects \ Research \ Wix_ProjectOutput \ Release \ -dMyApplication.TargetExt = .exe -dMyApplication.TargetFileName = MyApplication.exe -dMyApplication.TargetName = MyApplication -dMyApplication.TargetPath = MyApplication \ Projects \ Research .exe -out obj \ Release \ -arch x86 Product.wxs

Итак, под msbuild все в порядке.

ОБНОВЛЕНИЕ 3.

Похоже, WiX использует активную конфигурацию сборки (см. Поле со списком на панели инструментов VS).
Я имею в виду, что если там выбрано Debug, проекты WiX будут включать отладочные данные для проектов, на которые есть ссылки. Если выбран Release, проекты WiX будут включать выходные данные выпуска.

С моей точки зрения, такое поведение неверно. Debug установщик должен включать вывод отладки упомянутых проектов. Release установщик - вывод выпуска.

Сообщение об ошибке было размещено здесь, но теперь оно закрыто без каких-либо объяснений.

Любые идеи?


person Dennis    schedule 16.08.2012    source источник


Ответы (3)


Вы можете использовать $ (var.Configuration), который настроен на конфигурацию решения (отладка, выпуск и т. Д.):

<File Id="MyApp.exe" KeyPath="yes" Source="..\MyApp\$(var.Configuration)\MyApp.exe" />
person BBR    schedule 14.04.2013
comment
Метод может быть правильным, но детали кажутся неправильными: 1.) Встроенные двоичные файлы помещаются в (projectdir) \ bin (конфигурация). В приведенном выше примере отсутствует каталог bin. 2.) По умолчанию только сборки Debug и Release собираются в bin, другие собираются в bin \ x86 (конфигурация). Пример не может учесть эту возможную разницу в глубине каталогов. Я использую $ (var. (Имя проекта) .TargetDir) - person balintn; 03.02.2019
comment
Вы, вероятно, правы относительно пути проекта, и после более внимательного изучения я могу сказать, что мой ответ в любом случае был неправильным или, самое большее, мог использоваться только как временное решение. Похоже, что проблема TC действительно заключалась в отсутствии знаний о Configuration Manager, как указано ниже. - person BBR; 04.02.2019

Попробуйте добавить переменную MyApplication.Configuration и установить для нее Release, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши узел "Ссылки" проекта в обозревателе решений и выберите "Добавить ссылку ...".
  2. В диалоговом окне «Добавить ссылку на библиотеку WiX» щелкните вкладку «Проекты».
  3. Выберите требуемый проект (ы) и нажмите кнопку «Добавить», затем нажмите «ОК», чтобы закрыть диалоговое окно.

Подробности здесь < / а>.

person Deqing    schedule 24.08.2012
comment
Эта переменная уже определена, и ее значение Debug. Я опубликовал ошибку в трекере WiX, но теперь он закрыт без объяснения причин. Обновил свой вопрос. - person Dennis; 24.08.2012

Поскольку я с успехом делаю именно то, что вы регулярно делаете, я подозреваю, что вы путаете конфигурацию решения с конфигурацией проекта. Конфигурация решения foo может использовать конфигурацию проекта bar - это просто имена, и они не должны совпадать. Проверьте диспетчер конфигурации (BUILD → Configuration Manager ... в VS2012) и убедитесь, что, когда конфигурация вашего решения имеет значение «Release», конфигурация вашего проекта также является «Release».

person mheyman    schedule 11.04.2013