web-dev-qa-db-fra.com

Variable de préprocesseur non définie WiX

Je commence à utiliser WiX afin de faire des builds automatisés pour créer des msi de mes projets c # et je rencontre l'erreur "Variable de préprocesseur non définie '$ (var.MyProject.TargetDir)'"

J'utilise la dernière WiX v3.0.5419. Dans mon fichier wxs, j'essaie d'utiliser des variables de préprocesseur répertoriées sur cette page Web ( 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>

J'ai ajouté la référence de MyProject au .wixproj et si je l'ouvre dans le Bloc-notes, je peux voir la référence.

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

Ceci est mon script de construction nant que j'utilise pour créer le msi. C'est peut-être parce que le .wixproj connaît la référence du projet qui n'est pas utilisée dans la construction?

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

Quelqu'un peut-il m'éclairer à ce sujet s'il vous plaît?

44
David

Comme vous l'avez déjà remarqué, votre script de construction nant n'utilise pas du tout le fichier wixproj.

Vous mélangez deux façons différentes de construire une configuration wix ici:

  1. Vous pouvez utiliser directement les outils de ligne de commande candle.exe Et light.exe. Cela ignore le fichier .wixproj. C'est ce que vous faites dans votre script de construction nant. Pour passer des valeurs pour des variables de préprocesseur comme $(var.MyProject.TargetDir), utilisez des options comme -dMyProject.TargetDir=c:\foo.

  2. Vous pouvez créer un fichier .wixproj avec votive (le complément Visual Studio pour wix). Comme tous les fichiers de projet Visual Studio, un fichier wixproj est en fait un fichier msbuild qui peut être construit avec msbuild.exe. Des variables telles que $(var.MyProject.TargetDir) sont automatiquement définies par les tâches msbuild pour la construction des configurations wix si la référence de projet correcte existe.

Je vous recommande de construire le fichier wixproj avec le <msbuild>tâche nant . Cela garantit que votre build nant fait la même chose que lorsque vous construisez la configuration manuellement à partir de Visual Studio.

49
Wim Coenen