1

MSBuild スクリプトでSvnInfo タスクを使用します。

<SvnInfo LocalPath="$(Sources)">
  <Output TaskParameter="Revision" PropertyName="Revision" />
</SvnInfo>

$(Sources)ソース ファイルのみが含まれます。

明らかSvnInfoに のファイルに依存します$(Sources)。次に、Target は info を使用してリビジョン番号付きの出力ファイルを生成します。

実際、リビジョン番号が変更されたときに SvnInfo を実行したいのですが、リビジョン番号が以前の実行と同じ場合はターゲットを実行しません (インクリメンタル ビルドを使用)。

ターゲット(タスクの呼び出しを含むタグの属性Inputs)で正しく入力を指定する方法は?TargetSvnInfo

私は次の方法でそれを作りました:

<ItemGroup>
  <Target1Inputs Include="$(Sources)\**" />
</ItemGroup>

<Target Name="Target1" Inputs="@(Target1Inputs)" Outputs="...">
  ...
  <!-- SvnInfo call here -->
  <!-- File with revision number is created here -->

</Target>

理想的には、どのファイルSvnInfoが依存しているかを推測せずに知る必要があるため、回避策のように思えます。そのような情報を入手することは可能ですか?

.svnまた、フォルダーが変更されているかどうかもわかりません。

4

1 に答える 1

0

基本的にこの方法で:

<PropertyGroup>
  <ExcludePdbs>$(YourOutputPath)\**\*.pdb</ExcludePdbs>
  <ExcludeTmp>$(YourOutputPath)\**\*tmp*</ExcludeTmp>
</PropertyGroup>

<!-- Prepare set of files -->
<ItemGroup>
   <Files Include="$(FilesToIncludeFolder)\**\*.*"
          Exclude="$(ExcludePdbs);$(ExcludeTmp);$(ExcludeOtherFiles);"/>
</ItemGroup>

<!-- Pass into the target -->
<Target Name="Target1" Inputs="@(Files)" Outputs="..." />

編集:質問が更新されたので、ここにも私の更新があります

リビジョンの変更状態を処理できると仮定すると、プロパティに依存して に追加Conditionして実行できます。Target$(RevisionWasChanged)

<Target Condition="$(RevisionWasChanged)=='True'"` />

また、ビルド スクリプトの実行フローを制御するには、<Choose>次の機能を使用できます。

<Choose>
    <When Condition="$(RevisionWasChanged)=='True'">
    </When>
    <Otherwise>
    </Otherwise>
</Choose>

うまくいくかどうか教えてください。

于 2011-08-16T11:31:57.000 に答える