15

在 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

4

3 回答 3

6

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

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

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

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

我认为,一个文件^前面有一个评论 - 也许很明显,Build|Clean 不会触及任何这些。

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

于 2012-01-26T14:10:35.730 回答
3

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

读取 .tlog 格式

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

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

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

于 2019-02-21T02:34:04.583 回答
0

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

于 2011-04-20T14:46:51.513 回答