在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())"/>
所以这可能意味着项目文件依赖于自定义构建步骤输出。
我的问题是:
由于
CanonicalTrackedInputFiles Class
是文档“ .read的文件跟踪日志解释器。以规范形式跟踪日志或已植根(^)以使其成为规范”的文件
当我有时间时,我会深入研究它。也许这个类和Microsoft.Build.Utilities下的其他类可以用来帮助我们使用tlog文件,而不是直接使用原始文本tlog文件。
另请参阅:CanonicalTrackedOutputFiles Class
,FlatTrackingData Class
,当然还有FileTracker Class
。
答案 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过程中完成的任何文件引用,具体取决于它的配置方式。