VSTS Visual Studio 构建任务不是增量的;不断重建
VSTS Visual Studio Build task is not incremental; keeps rebuilding
VSTS msbuild 任务似乎继续执行 CoreCompile
,尽管 Clean
选项被禁用并且源文件未受影响(源获取中没有任何变化)。
然而在本地,当我 运行 msbuild
在本地或直接在构建机器上时,它的行为符合预期 - 所有未修改的项目都不会重建; CoreCompile
不 运行 csc.exe
.
我发现这是因为 MSBuild 生成并静默注入编译的 "TargetFrameworkMoniker" 文件被写入临时目录,即 运行 System.IO.Path.GetTempPath()
时得到的文件.
然而,VSTS 代理指定了它们自己的临时目录 (_temp
),并且似乎在每次构建后都会清除它。这似乎是个好行为 - MSBuild 应该修复它 (IMO)。
如果您的项目使用混合框架,可能无法正常工作,一个快速而肮脏的修复方法是添加此 MSBuild 选项:
/p:TargetFrameworkMonikerAssemblyAttributesPath=$(Build.Repository.LocalPath)\temp.moniker.cs
或者,您可以通过以下方式禁用文件生成:
/p:GenerateTargetFrameworkAttribute=False
VSTS msbuild 任务似乎继续执行 CoreCompile
,尽管 Clean
选项被禁用并且源文件未受影响(源获取中没有任何变化)。
然而在本地,当我 运行 msbuild
在本地或直接在构建机器上时,它的行为符合预期 - 所有未修改的项目都不会重建; CoreCompile
不 运行 csc.exe
.
我发现这是因为 MSBuild 生成并静默注入编译的 "TargetFrameworkMoniker" 文件被写入临时目录,即 运行 System.IO.Path.GetTempPath()
时得到的文件.
然而,VSTS 代理指定了它们自己的临时目录 (_temp
),并且似乎在每次构建后都会清除它。这似乎是个好行为 - MSBuild 应该修复它 (IMO)。
如果您的项目使用混合框架,可能无法正常工作,一个快速而肮脏的修复方法是添加此 MSBuild 选项:
/p:TargetFrameworkMonikerAssemblyAttributesPath=$(Build.Repository.LocalPath)\temp.moniker.cs
或者,您可以通过以下方式禁用文件生成:
/p:GenerateTargetFrameworkAttribute=False