为Visual Studio 2017无头安装SQL Server数据工具(SSDT)

cri*_*mbo 5 sql-server-data-tools visual-studio-2017

对于构建服务器,我们需要为Visual Studio 2017无头安装SQL Server数据工具.

我们的构建服务器已经拥有"Visual Studio 2017的构建工具",它为无头构建提供了很好的支持.但是由于缺少MSBuild目标,任何SSDT项目的解决方案都会失败,例如:

[MSBuild] src\Database\Upfront.Database.sqlproj: Build default targets [10:27:46][src\Database\Upfront.Database.sqlproj] E:\BuildAgent\work\7769fbf76d8b9008\src\Database\Upfront.Database.sqlproj(56, 3): error MSB4019: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

首先,我尝试修改"Build Studio for Visual Studio 2017"安装的组件集,但似乎没有可用的SSDT组件.

其次,我尝试为Visual Studio 2017安装SSDT,它似乎没有正确安装到"VS 2017构建工具"配置文件中.它允许我创建一个新的VS 2017配置文件,例如SQL,因此安装了所需的MSBuild文件C:\Program Files (x86)\Microsoft Visual Studio\2017\SQL\; 但是它改变了我的msbuild环境变量,因此C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools找不到"Build Tools for VS 2017"文件(其中),导致C#项目无法构建.

似乎"用于Visual Studio 2017的SSDT"和"用于Visual Studio 2017的构建工具"彼此不兼容.有没有人能够让他们一起工作?或者有没有人找到在构建服务器上构建SSDT项目的更好方法?

除了构建服务器支持外,SSDT一直都很棒,每次都很痛苦.

Ed *_*ott 6

对 ssdt 数据库项目的构建支持现在可用作此确切场景的 nuget 包。

这包含有关如何为 ssdt 数据库项目配置构建服务器的所有详细信息:

https://blogs.msdn.microsoft.com/ssdt/2016/08/22/part-5-use-your-own-build-and-deployment-agent/

其要点是您下载 nuget 包并将其解压缩到某处,然后设置几个环境变量以指向包内容,您应该可以在没有 Visual Studio 的情况下继续构建。

埃德


Col*_*n K 5

在服务器上安装 SSDT for Visual Studio 2017 后,需要设置一个名为SQLDBExtensionsRefPath“C:\Program Files (x86)\Microsoft Visual Studio\2017\SQL\MSBuild\Microsoft\VisualStudio\v15.0\SSDT”的环境变量”。.sqlproj 文件中的以下行使用此环境变量:

<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
Run Code Online (Sandbox Code Playgroud)

现在,msbuild 将能够找到 .targets 文件,但它仍然会在 BuildTools 文件夹而不是 SQL 文件夹中查找 IDE 扩展。我认为设置 SSDTPath 环境变量应该可以解决此问题(您可以尝试将其设置为“C:\Program Files (x86)\Microsoft Visual Studio\2017\SQL\Common7\IDE\Extensions\Microsoft\SQLDB\Dac\ 140”并查看您的构建是否有效),但我仍然收到错误,因为 msbuild 无法找到 master.dacpac 文件。

最后,我修改了.sqlproj文件来修复SSDTExists属性并修改VsInstallRoot属性。我更改了以下几行:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
  <!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
  <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
  <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

到:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
  <!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
  <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets') Or '$(SQLDBExtensionsRefPath)' != ''">True</SSDTExists>
  <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
<PropertyGroup>
  <!-- In the case that SSDT was installed separately from Visual Studio (e.g. for the Visual Studio build tools), change the VsInstallRoot so that the IDE extension will be found. -->
  <VsInstallRoot Condition="!Exists('$(VsInstallRoot)\Common7\IDE\Extensions\Microsoft\SQLDB') And Exists('$(VsInstallRoot)\..\SQL')">$(VsInstallRoot)\..\SQL</VsInstallRoot>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我没有遇到您遇到的 msbuild 环境变量因 SSDT 安装而混乱的问题,因此只需进行这两个更改,一切就可以在我的构建服务器上顺利运行。