15

Visual Studio 2010では、インクリメンタルビルドはファイルトラッカー(Microsoft.Build.Utilities.FileTracker)を使用して実行されます。中間ディレクトリにこれらの*.1.tlogファイルを作成する責任があるようです。

これらの.tlogファイルの構文への参照が見つかりませんでした。
これらには、インクリメンタルビルドでコンパイルする必要があるファイルを確認するために、トラッカーがツールの実行を追跡している間に読み取り/書き込みされるファイルへのパスのリストが含まれています。ただし、これらのファイルには、「^」や「|」などの特殊文字も含まれています。
私が気付いたもう1つのことは、これらのファイルがVisualStudioのターゲットファイルから編集されることがあるということです。たとえば、CustomBuildStepターゲットのMicrosoft.CppCommon.targetsで、次の行が見つかりました。

 <!-- Appended tlog to track custom build events -->
    <WriteLinesToFile File="$(IntDir)$(ProjectName).write.1.tlog" Lines="@(CustomBuildStep->'^%(Identity)');@(CustomBuildStep->MetaData('Outputs')->FullPath()->Distinct())"/>

したがって、これはおそらく、プロジェクトファイルがカスタムビルドステップの出力に依存していることを意味します。

私の質問は次のとおりです。

  • .tlogファイル構文のリファレンスを知っている人はいますか?
  • Visual Studioでトラッカーログが使用されるのはどの場合ですか?CLと、それを使用するLinkタスクについては知っていますが、Visual Studio IDE自体が、特定のプロジェクトに対してmsbuildを実行するかどうかを決定するためにCLを使用しているようです。

ありがとう


編集

別のヒント:

CanonicalTrackedInputFiles Classは、「標準形式の.read。追跡ログまたは正規化するためにルート化された(^)ログのファイル追跡ログインタープリター」として文書化され
ています。時間があれば、もう少し掘り下げます。おそらく、このクラスとMicrosoft.Build.Utilitiesの下の他のクラスを使用して、生のテキストのtlogファイルを直接操作する代わりに、tlogファイルを操作するのに役立てることができます。

も参照してください:CanonicalTrackedOutputFiles ClassFlatTrackingData ClassそしてもちろんFileTracker Class

4

3 に答える 3

6

このようなことはどこにも文書化されていないようなので、試行錯誤に基づいて、いくつかの例のtargets/ xml/propsファイルを見つめることによってこれを理解しなければなりませんでした:

カスタム ビルド ステップが手動で tlog ファイルに書き込む理由は、Build|Clean (およびおそらくそのコマンド ラインの対応物) が tlog ファイルをスクレイピングして、削除するファイルを見つけるためです。*.write.tlogに一致するすべてのファイル、または中間フォルダーでおそらくを探し*.1.write.tlog、それぞれのファイル名のリストを読み取り、名前が付けられたファイルを削除するようです。そのため、カスタム ビルド ステップがその出力を認識している場合、単純にそれらを tlog ファイルに記録し、そのように Build|Clean とやり取りすることができます。

(これを自分で試すことができます-プロジェクトをビルドし、いくつかの一時ファイルを作成し、一時ファイルへのパスを含むプロジェクトの中間フォルダーに独自のtlogファイルを追加してから、ビルド|クリーンを実行します。一時ファイルは一緒に削除されます通常のビルド アーティファクト)。

tlog ファイルでは、プレフィックスのないファイルが出力ファイルの名前です。Build|Clean を実行すると、これらのファイルは削除されます。

コメントの前にあるファイル^だと思います-おそらく明らかに、 Build|Clean はこれらのいずれにも触れません。

に関しては|、異なるファイル名を区切るために使用されるコメント行でしか見たことがありません。で区切られた複数の出力ファイルをオンラインに置くと|、 Build|Clean はそれらを削除しないため、これは単なる規則であり、特別な構文ではないと思います。

于 2012-01-26T14:10:35.730 に答える
0

tlog ファイルは、MSBuild のファイル追跡システムによって生成されます。個々のコンパイラに固有のものではなく、構成方法に応じて、MSBuild プロセスで行われたすべてのファイル参照をキャプチャできます。

于 2011-04-20T14:46:51.513 に答える