【问题标题】:File Tracker Log file format文件跟踪器日志文件格式
【发布时间】:2011-08-09 10:15:55
【问题描述】:

在 Visual Studio 2010 中,增量构建是使用文件跟踪器 (Microsoft.Build.Utilities.FileTracker) 完成的。似乎它负责在中间目录上创建这些 *.1.tlog 文件。

我找不到对这些 .tlog 文件语法的任何引用。
它们包含在跟踪器跟踪某些工具的执行时读取/写入的文件的路径列表,以检查应在增量构建中编译哪些文件。但是,这些文件也包含一些特殊字符,例如“^”和“|”。
我注意到的另一件事是,这些文件有时是从 Visual Studio 目标文件中编辑的。例如,在 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。

谢谢


编辑

另一个提示:

CanonicalTrackedInputFiles Class 是“用于 .read 的文件跟踪日志解释器的文档。跟踪规范形式的日志或那些已被植根 (^) 以使其成为规范的日志
当我有时间时,我会深入研究它。也许这个类和Microsoft.Build.Utilities 下的其他类可以用来帮助我们处理 tlog 文件,而不是直接处理原始文本 tlog 文件。

另请参阅:CanonicalTrackedOutputFiles ClassFlatTrackingData Class,当然还有FileTracker Class

【问题讨论】:

    标签: visual-studio-2010 msbuild incremental-build


    【解决方案1】:

    这些东西似乎没有记录在任何地方,所以我不得不根据反复试验和盯着一些例子来解决这个问题 targets/xml/props 文件:

    自定义构建步骤手动写入 tlog 文件的原因是 Build|Clean(可能还有它的命令行对应项)会抓取 tlog 文件以查找要删除的文件。它似乎在中间文件夹中查找与*.write.tlog*.1.write.tlog 匹配的所有文件,读取每个文件名列表,并删除命名的文件。因此,如果自定义构建步骤知道其输出是什么,它可以简单地将它们记录在 tlog 文件中,并以这种方式与 Build|Clean 交互。

    (您可以自己尝试一下 - 构建您的项目,创建一些临时文件,将您自己的 tlog 文件添加到项目的包含临时文件路径的中间文件夹中,然后执行 Build|Clean。您的临时文件将是与通常的构建工件一起删除。)

    在 tlog 文件中,没有前缀的文件是输出文件的名称。执行 Build|Clean 时会删除这些文件。

    我认为,在注释之前带有 ^ 的文件 - 也许很明显,Build|Clean 不会触及任何这些。

    至于|,我只在注释行中看到过,用于分隔不同的文件名。我怀疑这只是一个约定,而不是一些特殊的语法,因为如果你将多个输出文件放在线上,用| 分隔,Build|Clean 不会删除它们。

    【讨论】:

    • 感谢汤姆的回答。 tlog 文件是在后台运行 tracker.exe 的结果,因此您可以根据需要对其进行更多实验。跟踪器似乎是一个非常方便的工具,当您在其上下文中运行某些可执行文件时,它会记录所有读取/写入的文件。无论如何,我真的希望对 tlog 格式有一些正式的定义,而不是猜测,所以如果你找到这样的参考,请告诉我。
    • 我认为'^'是表示一个文件(比如文件'A'),它后面的任何文件没有'^'是文件'A'依赖的文件.具有相同依赖关系的文件用“|”分隔这样依赖项就不必多次列出。
    【解决方案2】:

    tlog 文件格式现在记录在此处:https://docs.microsoft.com/en-us/visualstudio/extensibility/visual-cpp-project-extensibility?view=vs-2017#tlog-files

    读取.tlog格式

    读取 .tlog 文件 (.read..tlog) 包含有关源文件及其依赖项的信息。

    行首的插入符号 (^) 表示一个或多个来源。共享相同依赖项的源由竖线 (|) 分隔。

    依赖文件列在源代码之后,每个都在自己的行中。所有文件名都是完整路径。

    【讨论】:

    • 感谢您提供此链接。是时候为跟踪器和 tlog 文件添加一些文档了!
    【解决方案3】:

    tlog 文件由 MSBuild 中的文件跟踪系统生成。它并不特定于单个编译器,它可以通过在 MSBuild 过程中完成的任何操作来捕获任何文件引用,具体取决于它的配置方式。

    【讨论】:

    • 我知道。您没有回答我的问题:您知道对 .tlog 文件语法的引用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2013-03-19
    相关资源
    最近更新 更多