在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())"/>
Run Code Online (Sandbox Code Playgroud)
所以这可能意味着项目文件依赖于自定义构建步骤输出.
我的问题是:
谢谢
CanonicalTrackedInputFiles Class将文档称为" .read的文件跟踪日志解释器.以规范形式跟踪日志或已经生根(^)以使它们成为规范 "
当我有时间时我会深入研究它.也许这个类和Microsoft.Build.Utilities下的其他类可以用来帮助我们使用tlog文件,而不是直接使用原始文本tlog文件.
另请参阅:CanonicalTrackedOutputFiles Class,FlatTrackingData Class当然FileTracker Class.
我目前正在使用大量的C++代码开发大型Android应用程序.它编译和运行,到目前为止一切顺利.
不幸的是,每当我修改我的本机源结构中的某些内容(添加/删除/重命名/移动文件)时(经常会发生这种情况),ndk-build会重建整个源代码,甚至是未触及的文件.
有谁知道如何设置Android NDK以某种方式逐步建立?
提前致谢
我已经定制了一个MSBuild项目,因此默认目标是一个名为"BuildWithExternalReference"的新目标.这个新目标调用另外两个目标; 第一个是自定义目标,称为"BuildExternalReference",它使用外部工具构建DLL.构建的DLL是主项目的引用,它是使用普通的"Build"目标构建的.我已经为'BuildExternalReference'目标设置了Inputs和Outputs属性,因此Inputs引用源文件,输出引用生成的DLL.
在Visual Studio 2012和Visual Studio 2010中,构建在第一次调用时都能正常工作.但是,在后续构建中,如果我更改外部源文件(由"BuildExternalReference"目标输入属性引用),则Visual Studio 2012只会报告"构建:0成功,0失败,1最新,0跳过".Visual Studio 2010继续完美运行.此外,使用MSBuild.exe从命令行构建工作完美.
我知道Visual Studio 2012中的构建系统已经更改,但我无法找到有关对增量构建执行方式的更改的信息.
Visual Studio 2012中是否有任何更改会导致增量构建发生变化?
这是我正在使用的csproj文件的缩减版本:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="BuildWithExternalTool" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ExternalSourceFiles Include="..\ExternalSourceFiles\\*\*.cs" />
<ExternalDll Include="..\ExternalSource\External.dll" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Target Name="BuildExternalTool" Inputs="@(ExternalSourceFiles);" Outputs="@(ExternalDll)">
<Exec Command="C:\External\Path\To\Tool.exe" />
</Target>
<Target Name="BuildWithExternalTool">
<CallTarget Targets="BuildExternalTool" />
<CallTarget Targets="Build" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
2012年11月1日更新
这是一个完整的自包含示例,可以重现该问题:
https://skydrive.live.com/redir?resid=EA1DD6ACA92F9EFF!155&authkey=!ANhuqF_rrCgxpLE
这是一个项目的解决方案.已自定义MSBuildIssueExample\MSBuildIssueExample.csproj文件,因此存在自定义默认目标.此默认目标调用自定义目标(称为"ExternalTool"),然后调用默认的Build目标.
自定义ExternalTool目标会写出一些消息以确保它正常工作,并且还会通过MSBuildIssueExample\ExternalTool\Output.txt文件复制MSBuildIssueExample\ExternalTool\Input.txt文件的内容.
Input.txt文件是ExternalTool目标的输入,Output.txt是输出.
要重新创建问题,请按照下列步骤操作:
1)在指定版本的Visual Studio中打开解决方案
2)构建解决方案一次,以确保输出相对于输入是最新的
3)修改MSBuildIssueExample\ExternalTool\Input.txt,使其内容与Output.txt不匹配
4)再次建造
在Visual Studio 2010中执行此过程时,将再次调用ExternalTool目标,并将Input.txt文件复制到Output.txt上.
在Visual Studio 2012中执行此过程时,即使输入比输出新,也不会调用ExternalTool目标,因此Input.txt的内容不会写入Output.txt.
但是,如果您执行Rebuild(而不仅仅是Build),则两个版本的Visual Studio都按预期工作.
生态系统中有无数的开发工具和术语,例如语言服务器、构建服务器、Metals、BSP、LSP、Bloop、Zinc、Coursier、增量编译器、演示编译器等。
我想知道是否有人可以演示它们如何组合在一起并简要解释关系和差异。具体来说,我希望按照“理解 Scala FP 库”的思路给出图表和答案。例如,这是我的尝试
(Concept) (Example implementation)
--------------------------------------------------------------------
IDE Visual Studio Code
| |
Scala IDE plugin Metals Visual Studio Extension
| |
Language Server Protocol Microsoft LSP
| |
Scala language server Metals
| |
Build Server Protocol BSP from JetBrains and Scala Center
| |
Scala build server Bloop
| |
Build tool sbt
| |
Dependency resolution Coursier
| |
Incremental compiler Zinc
| |
Presentation compiler parser and typer phases of scalac
| …Run Code Online (Sandbox Code Playgroud) development-environment scala build-tools incremental-build scala-metals
我知道该属性,/incremental但NO如果我想停止增量构建,它每次都需要更改.有没有办法永久停止所有项目.
我已经为我的项目启用了 gradle 构建缓存。但是,我们正在使用一些非内置任务,例如来自第三方插件的 npm-install。Gradle 没有为这些任务启用缓存。例如,当执行此类任务时,它会显示如下内容:
Task :data-export-ui-kjs:npm-configure
Build cache key for task ':data-export-ui-kjs:npm-configure' is bbe0dafcd467a2afb2834acafe2993f5
Caching disabled for task ':data-export-ui-kjs:npm-configure': Caching has not been enabled for the task
Run Code Online (Sandbox Code Playgroud)
有没有办法为此类非内置任务启用构建缓存?
我们目前有一个大的Maven 2项目,它是许多具有复杂依赖性的单独独立项目的集合,除了一些常见的父POM用于构建.最后,我们总是必须将应用程序作为一个整体发布,所以我宁愿将其转换为一个或几个大项目.
有没有人有如何优化大型项目的持续集成构建的经验.Maven或Hudson的增量构建功能是否有用?在一个模块中只做了一点小改动时,我宁愿不要总是等待2个小时.
另一方面,可以肯定的是,您始终必须重建并重新测试已更改模块的至少所有直接和间接依赖关系.这也是我们目前正在与Hudson一起做的事情,自动触发所有依赖的工作.
为同一个项目分成多个构建作业是否有效?我通常不喜欢在服务器上有所有其他生成的东西,如报告,文档等可能已过时的工件.
谢谢你的任何想法.
在探索 tsconfig.json 文件时,我一直关注 tsconfig.json 中增量的确切含义是什么

javascript incremental-build typescript tsconfig typescript-typings
我正在学习Gradle并试图了解输入和输出文件如何确定任务是否是最新的.
即使构建文件没有更改,此任务也永远不会是最新的.
task printFoo() {
inputs.file(getBuildFile())
doLast {
println 'foo'
}
}
Run Code Online (Sandbox Code Playgroud)
即使构建文件发生更改,此任务也始终是最新的.
task printFoo() {
outputs.file(getBuildFile())
doLast {
println 'foo'
}
}
Run Code Online (Sandbox Code Playgroud)
我曾期望这两个例子只在构建文件发生变化时将任务视为过时,否则就是最新的.我错过了什么?
我有一个 C# 库项目,它具有一些使用 PowerShell 在“BeforeBuild”中创建的依赖项。
MSBuild 似乎每次都会执行目标“BeforeBuild”,即使库项目本身不需要构建也是如此。
我想将构建过程配置为仅在库需要(重新)构建时运行 PowerShell 脚本。
有没有办法做到这一点?
我尝试使用目标“BeforeBuild”和“BeforeCompile”。但似乎每次都会执行。
msbuild ×3
gradle ×2
android ×1
android-ndk ×1
build-tools ×1
gradle-cache ×1
hudson ×1
java ×1
javascript ×1
kotlin ×1
maven ×1
msbuild-task ×1
scala ×1
scala-metals ×1
tsconfig ×1
typescript ×1