私は何かを時々繰り返すことは気にしませんが、MSBuildではどうして実際にどうすればの繰り返しを避けるのか分かりません。通常の意味では「機能」を提供しません。ターゲットはCallTarget
でさえ一度だけ呼び出され、<Import>
はProject
レベルでのみ動作します。MSBuildで繰り返しを避けるには?
は、ここで私は "repetizeを" デしようとしている具体的な例を示します
<Target Name="Tgt1">
<PropertyGroup><Conf1>Twiddle</Conf1><Conf2>Thing</Conf2></PropertyGroup>
<PropertyGroup><xxxxxxxxxxExePath>$(xxxxxxxBuildRoot)\$(Conf1)Console-xxxxxxxxed</xxxxxxxxorExePath></PropertyGroup>
<MSBuild Projects="$(BuildSingleProj)" Targets="Build;Merge"
Properties="Configuration=$(Conf1)$(Conf2);Platform=$(Platform);CompiledFileName=$(CompiledFileName);ProjectName=$(ProjectName);SolutionFile=$(SolutionFile);Root=$(Root);Caller=$(MSBuildProjectFullPath)"/>
<MakeDir Directories="$(xxxxxxxxorExePath)" />
<WriteLinesToFile File="$(xxxxxxxxorExePath)\xxxxxxx.IsPortable.txt" />
<WriteLinesToFile File="$(xxxxxxxxorExePath)\xxxxxxx.Global.Settings.xml" Lines="@(xxxxxxxLicense)" Overwrite="true" />
<Exec Command='$(xxxxxxxxorExePath)\xxxxxxx.exe -a "$(xxxxxxxBuildRoot)\$(Conf1)$(Conf2)-Merged\xxxxxxx.exe" "$(xxxxxxxBuildRoot)\$(Conf1)$(Conf2)-xxxxxxxxed\xxxxxxx.exe"'/>
</Target>
私はそのような4つの目標、Tgt1
、Tgt2
、Tgt3
、Tgt4
を持っています。 これらの4つのターゲットで異なるものは、最初の行で、Conf1
とConf2
を定義するものです。
私が気づいている、より多くのまたはより少ない実行可能な重複除外アイデアは、共有コードを新しいターゲットに移動し、MSBuild
タスクを使用して呼び出すことです。残念ながら、loooooongプロパティの文字列を手動で渡す必要があります。このタスクでは、ほんの少し(11個のプロパティと1個のアイテムグループを数えました)を使用します。
追加の要件は、これらのターゲットのサブセットを任意ので呼び出すことができます。 \t:Tgt2,Tgt3
。
このコードをコピー/ペーストするだけの賢明な選択肢がありますか?代わりに大量のプロパティリストをコピーする必要はありません。
これは、もはや1つだけ、あるいは2つしか作成できないことを意味します。その能力を保持する方法はありますか? –
アイテムに条件を付けることができます。答えを例で更新します。 –
ありがとうございますが、_two_ビルドを含めるには条件が非常に厄介になることがあります。私は現在、 '/ t:Tgt1、Tgt2'を指定する能力を保持したいので、繰り返しを続けることに傾いています - 実際のスクリプトは実際にはもっとターゲットをいくつか持っており、任意のサブセットを選ぶ能力に頼っていますこのような。 –