我正在尝试在我们的Windows Server 2016服务器上建立.sqlproj SSDT项目的持续集成。
为了做到这一点,我已经在服务器上安装了VS2017和SSDT工具以获得所需的工具。我还安装了2017年的MS构建工具。
我目前遇到的问题是关于看似错误匹配的已安装ms构建工具和ssdt的版本。
我用来运行构建的命令如下:
C:\\Windows\Microsoft.NET\\Framework64\\v4.0.30319\\MSBuild.exe /p:VisualStudioVersion=15.0 /property:MSBuildExtensionsPath="C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\MSBuild\\" /property:VsInstallRoot="C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\" DPAP-SQL-Slim.sln
通过那里传递的两个开关是设置.sqlproj文件在通过Visual Studio运行时期望找到的两个环境参数。这样做是因为默认情况下MSBuild不提供它们。
我目前得到的错误如下:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(477,5): error MSB4062: The "SqlModelResolutionTask" task could not be loaded from the assembly C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\Common7\IDE\Extensions\Microsoft\SQLDB\Dac\140\Microsoft.Data.Tools.Schema.Tasks.Sql.dll. Could not load file or assembly 'Microsoft.Build.Utilities.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
现在,我可以在VS2017命令提示符中运行命令:gacutil /l
看到Microsoft.Build.Utilities.Core
dll的明显安装版本是v14:Microsoft.Build.Conversion.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
我错过了什么关键吗?看来安装构建工具2017实际上并没有更新GAC并注册正确的DLL。
答案 0 :(得分:2)
请勿使用.NET Framework中包含的msbuild.exe(C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
)。它很旧,不支持较新的msbuild版本的某些功能。
始终使用随Visual Studio或构建工具一起安装的MSBuild版本。根据安装的VS版本,可能是
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe
从VS 2017开始,MSBuild也没有在系统范围内安装,但是许多版本(例如VS 2017预览版,不同版本,如Build Tools / Enterprise / Community等)可以并排安装,这就是为什么您在GAC中找不到这些MSBuild程序集。
答案 1 :(得分:0)
我遇到了在CI / CD管道上构建SQL Server项目的问题。 Azure DevOps上的所有预构建任务都不适合我。通过避免将SQL Server项目添加到解决方案中,我解决了这个问题。
我通过使用MSBuild SDK实现了这一目标,该功能能够从一组SQL脚本生成SQL Server数据层应用程序包(.dacpac
)。通过将第二个项目添加到解决方案中,我设法继续利用通过Visual Studio上的SQL Server Object Explorer将项目链接到实时数据库的优势。我在此answer中提供了更详细的说明。