WiXをMSBuild (Visual Studio)で使用する場合、ビルドのたびに以前に生成したファイルが削除されます。それを回避する方法の話です。

[WiX] Incremental clear | Test better, code betterのような状況に私も遭遇しました。

WiXで二ヶ国語のmsiを吐き分けようと、汚い解決をしていたらファイルが消されてしまう場合があることに気がついた。
まず、wixprojファイル内では、以下のようにして生成

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<OutputPath>bin\$(Platform)$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platform)$(Configuration)\</IntermediateOutputPath>
<Cultures>$(cultures)</Cultures>
</PropertyGroup>

のようにして、msbuildのパラメタにcultures=ja-JPと言語指定を与えて生成させようと作っていたら、1言語だとうまくいくのに、
msbuild /p:cutures=ja-JP
msbuild /p:cultures=en-US
と2言語指定すると、最初の言語のmsiが消される。この場合はen-USの下のmsiだけが残る。

この問題に対し、その記事とは別の手段、具体的にはMSBuildの段階でも対処できるのではないかと考えました。

すなわち、このようにIncrementalCleanという名前の空のターゲットを定義すると削除されなくなりました。なお、ToolsVersionで指定しているように、MSBuild 4.0 (Visual Studio 2010以上)の場合しか試していません。

<Project
  DefaultTargets="Build"
  ToolsVersion="4.0"
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
  ……
 
  <Target Name="IncrementalClean"/>
</Project>

まあ、いずれにせよ場当たり的なやり方だという自覚はあります。

スポンサード リンク

この記事のカテゴリ

  • ⇒ WiXプロジェクトのIncrementalCleanを回避する
  • ⇒ WiXプロジェクトのIncrementalCleanを回避する