WiX неопределенная переменная препроцессора - PullRequest
44 голосов
/ 14 января 2010

Я начинаю использовать WiX для создания автоматических сборок для создания msi моих проектов на c # и у меня возникает ошибка "Неопределенная переменная препроцессора '$ (var.MyProject.TargetDir)'"

Я использую последнюю версию WiX v3.0.5419. Внутри моего файла wxs я пытаюсь использовать переменные препроцессора, которые перечислены на этой веб-странице (http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor-variables.aspx)

<Component Id="MyId" Guid="MyGuid">
   <File Id="MyId" Name="MyName" KeyPath="yes" 
      Source="$(var.MyProject.TargetDir)\MyName.dll" />
</Component>

Я добавил ссылку на MyProject в .wixproj, и если я открою его в Блокноте, я смогу увидеть ссылку.

<ItemGroup>
  <ProjectReference Include="..\MyProject.csproj">
    <Name>MyProject</Name>
    <Project>{guid}</Project>
    <Private>True</Private>
  </ProjectReference>
</ItemGroup>

Это мой скрипт сборки nant, который я использую для создания msi. Может быть, это потому, что .wixproj знает о ссылке на проект, которая не используется в сборке?

<exec basedir="${tools.wix}" managed="true" program="candle.exe">
  <arg line='-out "${tools.wix.objfile}"' />
  <arg value="../MySetup.wxs" />
</exec>

Может кто-нибудь просветить меня, пожалуйста?

1 Ответ

49 голосов
/ 14 января 2010

Как вы уже заметили, ваш скрипт сборки nant вообще не использует файл wixproj.

Здесь вы смешиваете два разных способа создания установки wix:

  1. Вы можете напрямую использовать инструменты командной строки candle.exe и light.exe. Это игнорирует файл .wixproj. Это то, что вы делаете в своем скрипте nant build. Чтобы передать значения для переменных препроцессора, таких как $(var.MyProject.TargetDir), используйте параметры, такие как -dMyProject.TargetDir=c:\foo.

  2. Вы можете создать файл .wixproj с помощью votive (дополнение для Visual Studio для wix). Как и все файлы проекта Visual Studio, файл wixproj на самом деле является файлом msbuild, который можно собрать с помощью msbuild.exe. Переменные типа $(var.MyProject.TargetDir) автоматически устанавливаются задачами msbuild для построения настроек wix, если существует правильная ссылка на проект.

Я рекомендую вам создать файл wixproj с помощью задачи <msbuild> nant . Это гарантирует, что ваша сборка Nant делает то же самое, что и при сборке установки вручную из Visual Studio.

...