- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CMake 项目,我的一个构建是在 Visual Studio 上使用 MSBuild 在 TeamCity 构建服务器上进行的。
我看到的是在运行 git clean -f -d -x
时经常失败(这是 TeamCity 在初始化构建时自己执行的一个步骤,作为源检查的一部分)。它失败的原因是因为 .tlog
文件正在生成到我的 CMake 构建文件夹中——进入 CMake 的内部 CompilerIdC
项目,CMake 使用它来识别本地 C 编译器。
什么是 .tlog
文件,是什么触发了它们的创建?我还没有找到这方面的文档。
我不明白为什么它们在 CMake 的运行和构建已经完成后 出现。我特别不明白为什么在所有 CompilerIdC
的源文件和项目文件都被删除后超过十五分钟才创建它们。
文件正在生成到 ${CMAKE_BUILD_DIR}/CMakeFiles/3.5.2/CompilerIdC/Debug/CompilerIdC.tlog
中。它们都是 link-VCTIP.(read|write|delete).*.tlog
的形式。
这是在 git clean
上失败并在 08:41 停止(当前截至 09:30)的构建的文件夹状态:
-rw-r--r-- 1 CI 197121 570 Jun 28 08:57 link-VCTIP.delete.1.tlog
-rw-r--r-- 1 CI 197121 1422 Jun 28 08:57 link-VCTIP.delete.26.tlog
-rw-r--r-- 1 CI 197121 7062 Jun 28 08:57 link-VCTIP.read.1.tlog
-rw-r--r-- 1 CI 197121 402 Jun 28 08:50 link-VCTIP.read.103.tlog
-rw-r--r-- 1 CI 197121 402 Jun 28 08:55 link-VCTIP.read.120.tlog
-rw-r--r-- 1 CI 197121 418 Jun 28 08:57 link-VCTIP.read.26.tlog
-rw-r--r-- 1 CI 197121 286 Jun 28 08:57 link-VCTIP.read.27.tlog
-rw-r--r-- 1 CI 197121 286 Jun 28 08:57 link-VCTIP.read.28.tlog
-rw-r--r-- 1 CI 197121 286 Jun 28 08:57 link-VCTIP.read.29.tlog
-rw-r--r-- 1 CI 197121 402 Jun 28 08:45 link-VCTIP.read.87.tlog
-rw-r--r-- 1 CI 197121 600 Jun 28 08:57 link-VCTIP.write.1.tlog
-rw-r--r-- 1 CI 197121 286 Jun 28 08:57 link-VCTIP.write.26.tlog
构建日志如下所示:
[08:39:58][VCS Root: MyVCS] [D:\TeamCity\buildAgent\work\58a2d5637a76fb3e]: "C:\Program Files\Git\bin\git.exe" clean -f -d -x
[08:41:26][VCS Root: MyVCS] warning: failed to remove build/Windows-x64-Release/: Directory not empty
[08:41:27]
[Updating sources] Failed to perform checkout on agent: '"C:\Program Files\Git\bin\git.exe" clean -f -d -x' command failed.
stdout: Removing Artifacts/x64/
<snip>
Removing build/Windows-x64-Release/CMakeFiles
<snip>
stderr: warning: failed to remove build/Windows-x64-Release/: Directory not empty
我使用的工具是:
最佳答案
.tlog
文件?它们由 MSBuild 的文件跟踪器输出,它包装了 Visual C++ 构建可执行文件(例如 cl.exe
和 link.exe
)以跟踪它写入的文件和读自。它将这些文件路径记录在中间目录的 .tlog
文件中,并依赖于这些文件路径来定义应如何构建增量构建。
(来源:Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build,作者 Sayed Hashimi 和 William Bartholomew。)
对 MSBuild 的任何使用都可以触发 .tlog
文件的创建或更新。
写入.tlog
文件的进程之一是vctip.exe
。 2018 年 3 月,Microsoft 工程师 Ian Bearman(VC++ 遥测所有者)explained :
This small application is a background process that runs during the build and allows the VC++ tools to communicate with the VS Telemetry Service (also known as VS Experience Improvement Program). The application stays running after a build in case another build is started immediately to help speed up compilation.
I understand that the current timeout (approaching something like 15 minutes) is way too long.
所以,答案是:即使在构建结束后,后台进程仍然存在,在这种情况下,即使在删除所有相关文件后,它也会继续尝试将遥测文件写入其目录。
Bearman 建议 two solutions :
Upcoming releases of Visual Studio (starting with VS 2017 15.7, now in preview) will shorten the time this stays running down to 15 seconds after the last build. Hopeful this will resolve any issues you have with this program staying running.
(我没有尝试升级,所以我无法确认这是否解决了问题。我还感兴趣地注意到 an earlier bug report 非常相同的问题,用 a promise in March 2018 回答了最近的更新已经修复了问题。)
vctip.exe
。In the meantime, to workaround this problem feel free to manually kill vctip.exe at any time. You can use the Windows command
taskkill /IM vctip.exe
to stop it immediately. This is always safe to do without fear of data-loss or corruption.
在我自己的 TeamCity 特定案例中,这很容易作为附加构建步骤添加到您的构建配置中,在 MSBuild 完成后——运行脚本:
taskkill /IM vctip.exe /f >nul 2>&1
请注意,此解决方案确实对您的构建系统做出了某些假设,例如它没有同时运行多个构建。并确保将其记录下来,因为稍后弄清楚它的来源将是一件令人头疼的事情......
关于visual-studio - 为什么 MSBuild 将 .tlog 文件生成到 CMakeFiles/CompilerIdC 中,我该如何让它停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51076195/
我有以下一段 msbuild 代码: C:\DirA\ C:\DirB\ '$(DirA)%(Filename)%(Extension)')">
我有一个 master.proj msbuild 脚本,它使用 MSBuild 任务构建多个项目。 这是一个典型的例子: 但是,我的问题是,如果在命令行上给出更多属性,它们不会传递给 MSB
我编写了一个自定义 MSBuild 任务,将其称为 TaskA,它解析文件并对其进行一些处理。我现在想编写另一个 MSBUild 任务,将其称为 TaskB,它在其中使用 TaskA。我知道我可以像使
我有好几次无法在 csproj 文件 (.NET Core) 中找到有关有效元素的信息。特别是具有 Content 和 Include/Exclude/Update/CopyToPublishDire
鉴于这样的事情.. DB1 Database
我有一个msbuild目标,它具有一个Import标签,如下所示: 在Company.LifeCycle.targets文件的内容中,如何以编程方式获取当前目录(在这种情况下为: C:\Progra
我在MSBuild脚本中创建的项目组的范围设置方面遇到一些问题。基本上,我想要做的是有两个不同的目标-我们将它们称为RunUnitTests和RunIntegrationTests-生成一个名为Tes
我希望下面的代码为 List 和 List2 生成相同的项目(我在搜索路径中有一个 cpp1 项目)。 '..\..\..\projects\**\%(identity).vcx
我正在编写一个 MSBuild 任务来升级数据库(完整源代码 here),遇到了一个我不知道如何处理的错误/设计特征。基本上,如果我声明: public int? TargetVersion {
MSBuild 针对最新目标发出以下消息: Skipping target "MyTarget" because all output files are up-to-date with respec
我正在为 msbuild 编写一个脚本,它应该在一个步骤中制作两批。 示例:2 个项目组 这两个组应该相互循环: 我希望 msbuild 使两个批次的结果都给出 1 A 2
我正在使用构建定义构建项目。执行此操作时,还会执行代码分析。代码分析输出各种文件,包括: ConsoleApplication2.exe.CodeAnalysisLog.xml ConsoleAppl
我正在尝试使用 MSBuild 从文本文件中读取文件列表,然后执行递归复制,将这些目录文件的内容复制到某个暂存区,同时排除某些扩展名(例如 .tmp 文件) 我已经设法使用 CreateItem 和
我有一个MSBuild项目,我希望将当前日期添加到正在创建的zip文件中。 我正在使用MSBuildCommunityTasks。 在网站http://msbuildtasks.tigris.or
我正在将一个 Web 应用程序包从 MSBuild 命令行部署到 IIS6 上的 MSDepSvc,它使用基本身份验证与以下命令一起正常工作: MSBuild.exe Web.csproj /p:
我有以下 MSBuild 脚本: test1;test2;test3 如果我调用不带任何参数的脚本,我会得
对于不是项目文件而是更复杂的构建脚本的 MSBuild 文件是否有标准文件扩展名? 我正在考虑 .msbuild.proj 以避免与其他 .proj 文件(我知道实际上是 MSBuild 文件)混淆。
假设我有两个耗时的目标,并且我想并行执行它们。假设一个目标运行单元测试,另一个目标生成一些文档。我尝试过这种方法: root.targets:
看起来(至少)有两个选项可以让 nant 使用 csproj 文件:使用 NAntContrib 的任务或直接使用 msbuild.exe (例如 codecampserver )。我读得对吗?如果是
如何获取内置 MSBuild 变量的列表? 我需要知道如何确定当前项目的 csproj 名称,并且认为了解我还能在 MSBuild 中找到什么内容可能会很有用。 最佳答案 来自 Microsoft 文
我是一名优秀的程序员,十分优秀!