我注意到我们的SSDT项目通过TFS构建定义的构建要比通过本地开发工具箱上的VS 2013慢得多。
在构建服务器本身上,我可以在大约2分钟内通过VS 2013构建我们最大的SSDT项目。使用MSBuild在同一服务器上从命令行在完全相同的项目中构建大约16分钟的时间(即以与TFS构建定义相同的方式构建SSDT项目)
我已经从两种方法中收集了/ verbosity:diagnostic输出,但是我一生都看不到提供给MSBuild的参数有任何实质性的区别。
在VS 2013中,配置为Debug:AnyCPU。
我使用的MSBuild命令是:
msbuild / t:重建/ p:配置=调试/ p:平台= AnyCPU .sqlproj
我在较小的SSDT项目上尝试了相同的过程,并且在构建时间上也得到了类似的相对差异(例如,另一个项目在VS 2013中花费了10秒,而在MSBuild中花费了70-80秒)
我拥有VS 2013(12.0.40629.00 Update 5)和SSDT(12.0.60629.0)的最新版本
有没有其他人看到过这个问题,或者甚至有解决方案?
转向VS 2015是否可以解决问题?
编辑以回应评论并包含诊断信息-15-08-2016
谢谢你们给我的建议。
埃德,当针对MSBuild测试VS时,我使用了构建目标Rebuild,我相信它是Clean和Build的结合。在TFS构建定义中,我将“清理工作区”和“清理构建”设置为true,但是“获取源代码”步骤的时间仅为9秒。
史蒂文(Steven),dbmdl因素听起来确实很有希望。但是,在从解决方案中删除所有dbmdl文件之后,我再次尝试了测试,但是我得到的时间还是相同的(我验证了dbmdl文件没有在测试版本之间重新生成)。另外,在测试之前,我已经删除了所有bin和obj文件夹,只是为了消除VS构建缓存数据的任何可能性。
Cece,我已经有效地从这个问题中删除了TFS,因为在测试VS和MSBuild时,我在构建时间上存在差异。我认为,如果我能破解的话,TFS的构建时间也会被破解。您对花费时间在哪个构建步骤上有一个很好的了解。我不想在最初的文章中充斥过多的信息,但是现在是时候了:-)。我使用了/ clp:PerformanceSummary选项来获得花费时间的细分。
在下面的第1部分中,您可以看到“ SqlBuildTask”中的时间几乎全部花费了。很高兴知道,但是对查明问题不是很有帮助。
在第2和第3节中,我使用/ verbosity:diagnostic输出从两种构建方法中获得的信息
我看不到两个版本之间的任何实质性区别。两者都必须使用此DLL来执行该实际生成(MSBuild显式声明对此DLL的引用):
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\\Extensions\Microsoft\SQLDB\Dac\130\Microsoft.Data.Tools.Schema.Tasks.Sql.dll"
Run Code Online (Sandbox Code Playgroud)
-------------第1节-------------
(使用/ clp:PerformanceSummary从MSBuild输出)
Project Performance Summary:
82518 ms P:\<snip>.sqlproj 1 calls
82518 ms rebuild 1 calls
Target Performance Summary:
0 ms BuildOnlySettings 2 calls
0 ms GetReferenceAssemblyPaths 2 calls
0 ms GetSqlSymbolsPath 1 calls
0 ms BeforeBuild 2 …Run Code Online (Sandbox Code Playgroud)