在TFS构建服务器上进行无界面生成.sqlproj文件

3
我正在尝试在TFS Build服务器上构建.sqlproj文件。我已经按照这里的说明进行了操作:http://sqlproj.com/index.php/2012/03/headless-msbuild-support-for-ssdt-sqlproj-projects/,这是从这里引导过来的:如何在构建服务器上构建.sqlproj项目? 但我仍然无法构建,错误信息如下:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets (441): "SqlModelResolutionTask"任务无法从"C:\Program Files (x86)\Common7\IDE\Extensions\Microsoft\SQLDB\Dac\120\Microsoft.Data.Tools.Schema.Tasks.Sql.11.dll"实例化。System.TypeInitializationException:'Microsoft.Data.Tools.Schema.Tasks.Sql.DataTask'的类型初始化程序引发了异常。---> System.IO.FileNotFoundException: 找不到文件或程序集'Microsoft.Data.Tools.Schema.Sql, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'或它的某个依赖项。系统找不到指定的文件。 在Microsoft.Data.Tools.Schema.Sql.Extensibility.ToolingShim.ConfigureExtensions() --- 内部异常堆栈跟踪的结尾 --- 在Microsoft.Data.Tools.Schema.Tasks.Sql.DataTask..ctor()
用于SQL项目的SqlTasks.targets文件引用了这个:
C:\Program Files (x86)\Common7\IDE\Extensions\Microsoft\SQLDB\Dac\120\Microsoft.Data.Tools.Schema.Tasks.Sql.11.dll
而它又引用了上述无效版本。
然而,通过上述链接安装的文件并没有安装此版本。它们确实安装了10.3.0.0版本,被以下文件引用:
C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.Data.Tools.Schema.Tasks.Sql.12.dll
但是,这个文件不是.targets文件使用的文件。
我不知道这个dll末尾的数字是什么意思,但对我来说,以12.dll结尾的文件引用了一个早期版本的以11.dll结尾的文件,这似乎有点奇怪。
我正在使用Visual Studio 2013和SQL Server 2012 - 在建立服务器上没有安装任何一个,我相信这是推荐的情况。我不知道IDE文件夹是什么,或者为什么.targets文件在使用它。

我已经花了两天时间尝试构建这个项目,但是我已经没有任何想法了。有人知道发生了什么吗?


除了Just TFS在下面建议在TFS服务器上安装VS2013之外,还要注意,在此之前您可能需要手动卸载SSDT Build Utilities MSI。存在一个问题,即如果所需的Visual Studio版本不存在于磁盘上,则该代码会错误地将其安装到C:\ Program Files(x86)\ Common7 \ IDE中。它应该安装到C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE中。因此,首先卸载该MSI,然后按照Just TFS的建议安装完整的VS2013。 - Kevin Cunnane
2个回答

3
如果您正在运行VS2013,则只需在安装屏幕上选择SSDT,它就会作为VS的一部分内置。将带有SSDT的VS2013安装到构建服务器上。创建一个构建定义,并在“Process> Build> Advanced”下添加以下MSBuild参数以构建SQL项目: /t:Build 如果您有发布配置文件并想要测试发布到SQL,则添加发布开关并提供链接到配置文件: /t:Publish /p:SqlPublishProfilePath=MyDB.publish.xml. 这将将数据库发布到发布文件中指定的服务器。
可以通过在Visual Studio中打开项目,右键单击项目并选择发布来创建发布配置文件。在满意发布选项后选择保存,然后将文件检入源代码控制,以使构建可以找到它(项目根目录)。

2
真是让人不爽,微软的 Boo 有些间隙需要在构建服务器上安装 VS。 - granadaCoder
嗨。这真的是唯一的方法吗?我们试图避免在构建服务器上安装VS,因为这有点违背了无头构建的初衷。 - bornfromanegg
不过,如果你下定决心并花时间安装所有单独的组件,并确保所有依赖项都存在,那么这是最干净和最快速的方法,你肯定可以设置一个无头构建。 - Just TFS
1
好的,那确实是我的问题。根据博客上的说法,这应该是可能的。如果我无法让它工作,那么我只能安装整个东西,但我希望我可能只是在指示中错过了什么。也许它们只适用于2012年或其他版本。 - bornfromanegg
说实话,去年我遵循那些指示时在2012年遇到了困难,因为SSDT没有集成到2012年版中。但是,我总是在我的构建服务器上安装VS以进行代码覆盖率,所以我仍然坚持使用我知道可行的方法。 - Just TFS
显示剩余4条评论

0

我在Azure DevOps CI/CD管道上构建SQL Server项目时遇到了问题。没有任何预构建的构建任务适用于我。而且在构建服务器上安装VS实例是不可能的,我想。

我通过避免将SQL Server项目添加到解决方案中来解决了这个问题。

我使用了一个MSBuild SDK,它能够从一组SQL脚本生成SQL Server数据层应用程序包(.dacpac)。通过将此第二个项目添加到解决方案中,我设法继续利用通过Visual Studio上的SQL Server对象资源管理器将项目链接到实时数据库的优势。我在这个答案中给出了更详细的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接