文件跟踪器日志文件格式

时间:2011-04-20 11:33:08

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

在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和使用它的链接任务,但似乎Visual Studio IDE本身使用它来决定是否为某个项目运行msbuild。

由于


修改

另一个暗示:

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

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

3 个答案:

答案 0 :(得分:7)

这些内容似乎没有在任何地方记录,因此我必须根据反复试验并通过盯着一些示例targets / xml / {{1}来解决这个问题。 } files:

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

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

在tlog文件中,没有前缀的文件是输出文件的名称。执行“构建”|“清理”时,将删除这些文件。

在评论之前有一个*.1.write.tlog的文件,我认为 - 显然,Build | Clean不会触及其中任何一个。

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

答案 1 :(得分:1)

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

  

读取.tlog格式

     

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

     

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

     

依赖文件在源之后列出,每个文件单独一行。所有文件名都是完整路径。

答案 2 :(得分:0)

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