TeamCity/.sqlproj 通过 MSBuild 构建——失败

Posted

技术标签:

【中文标题】TeamCity/.sqlproj 通过 MSBuild 构建——失败【英文标题】:TeamCity/.sqlproj build via MSBuild -- FAILED 【发布时间】:2017-07-26 09:37:32 【问题描述】:

这一切都始于 TC 中的 VS2017 runner 类型。它失败了,没有任何错误或提示(解决方案级别的(default targets) -- FAILED. 消息除外)。我将其范围缩小到 .sqlprojects。这些不是通过 MSBuild 构建的,它们确实在构建代理上的 VS2017 中完美编译。 我把它归咎于 SSDT……但我想我检查了一切。这是在 TC 构建中上升到解决方案级别的问题:

我注意到,对于 VS2017,SSDT 带有 VS 设置。 “工作负载”“数据存储和处理”已安装,“单个组件”下的“SQL Server Data Tools”也已安装。 我在https://docs.microsoft.com/EN-US/sql/ssdt/download-sql-server-data-tools-ssdt 上注意到“如果您在 Visual Studio 2017 中使用 SSDT,请安装 AS 和 RS 组件”这句话。做到了。没有改变。 SSDT 也为以前的版本单独安装。

这个stack 是相关的,但对我没有帮助。

还有其他想法吗?


我更进一步。除了 VS,构建工具也安装在构建代理上,TeamCity 的 VS2017 运行器显然使用构建工具中的 MSBuild。 正如您在上面看到的,我也从 Build Tools 中重现了 MSBuild 的问题。 如果我选择 VS2017 的 MSBuild“版本”,它就像一个魅力(就像它在 VS 中一样)。 简而言之:

不工作

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin

作品

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin

【问题讨论】:

【参考方案1】:

我从Lukie Briner 找到了一篇博文,他的最后一段为我指出了解决方案(谢谢哥们!)。

仍然不知道为什么/如何会发生这种情况,可能与构建工具、SSDT、Visual Studio 等的安装顺序有关?

原因:构建工具及其版本的 MSBuild 中缺少 SSDT。

我做了什么:

复制SSDT文件夹

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0.

哇!我终于看到了真正的错误消息

现在我不得不从

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\Extensions\Microsoft

然后砰……

是的,TeamCity 的 VS2017 跑步者也很满意。

【讨论】:

【参考方案2】:

似乎构建工具和 SSDT 的问题现在已经解决,您不必再手动复制目标目录(Visual Studio Build Tools 2017 v15.9.8)。

    只需打开安装在构建代理服务器上的 Visual Studio 修改构建工具安装 选择安装“数据存储和处理工具” 修改

构建现在应该可以工作了。

【讨论】:

以上是关于TeamCity/.sqlproj 通过 MSBuild 构建——失败的主要内容,如果未能解决你的问题,请参考以下文章

“字典中不存在给定键”的代码分析工具错误。

将 pdb 文件包含到我的 nuget (nupkg) 文件中

Docs-VisualStudio-MSBuild-MSBuild参考:MSBuild 保留属性和已知属性

如何只用visual c++编译器而不安装visual studio

绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合

如何通过 Windows Azure 通过 GCM 通过唯一 ID 发送特定 Android 设备的通知?