web-dev-qa-db-ja.com

WiX未定義のプリプロセッサ変数

自動ビルドを行ってc#プロジェクトのmsiを作成するためにWiXを使用し始めましたが、エラー "未定義のプリプロセッサ変数 '$(var.MyProject.TargetDir)'"

最新のWiX v3.0.5419を使用しています。 wxsファイル内で、このWebページにリストされているプリプロセッサ変数を使用しようとしています( http://blogs.msdn.com/jrock/archive/2008/01 /29/candle-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>

これは、msiの作成に使用する私のnantビルドスクリプトです。おそらく、.wixprojがビルドで使用されていないプロジェクト参照を知っているからでしょうか?

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

誰でもこれで私を啓発できますか?

44
David

既に述べたように、nantビルドスクリプトはwixprojファイルをまったく使用していません。

ここでは、2つの異なる方法を組み合わせてwixセットアップを構築しています。

  1. _candle.exe_および_light.exe_コマンドラインツールを直接使用できます。これは_.wixproj_ファイルを無視します。これは、nantビルドスクリプトで実行していることです。 $(var.MyProject.TargetDir)などのプリプロセッサ変数の値を渡すには、_-dMyProject.TargetDir=c:\foo_などのオプションを使用します。

  2. Votive(wixのVisual Studioアドオン)を使用して.wixprojファイルを作成できます。すべてのVisual Studioプロジェクトファイルと同様に、wixprojファイルは実際には_msbuild.exe_でビルドできるmsbuildファイルです。正しいプロジェクト参照が存在する場合、$(var.MyProject.TargetDir)などの変数は、wixセットアップをビルドするためにmsbuildタスクによって自動的に設定されます。

_<msbuild>_ nant task でwixprojファイルをビルドすることをお勧めします。これにより、nantビルドは、Visual Studioから手動でセットアップをビルドする場合と同じようになります。

49
Wim Coenen