[WiX] Incremental clear

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だけが残る。
wix2010.target
をみると以下のTargetでIncrementalCleanが定義され、以前に作成したものは消去するという動作をする。

<!--
========================================================================
IncrementalClean
Remove files that were produced in a prior build but weren't produced in the current build.
The reason is that if, for example, the name of the .msi/.msm has changed we want to delete the
old copy.
Leave the Clean cache file containing only the files produced in the current build.
========================================================================
-->
<Target
Name="IncrementalClean"
DependsOnTargets="_CleanGetCurrentAndPriorFileWrites">

Culturesがその都度変わり、それにつれて、OutputDirも変わる。
言語ごとにフォルダが作られ、Release\ja-JPとRelease\en-USにそれぞれmsiが入る。
消されるのは、今関係している言語の環境だけかと思っていたのだが、元のOutputDirの下すべてが対象となるようだ。とりあえず、Outputdirを別々にするようにして逃げて後で考えることにした。
いろいろ気が利いているWiXだけど、そこまでやってくれるとは思わなかった。

広告
%d人のブロガーが「いいね」をつけました。