问题描述
我想在Linux容器内构建.sqlproj。问题在于构建.sqlproj依赖于SSDT,并且到目前为止,我找不到可以在Linux上独立安装的SSDT 。
错误,我在容器中看到正在运行'dotnet msbuild':
error MSB4019: The imported project "/usr/share/dotnet/sdk/2.2.402/Microsoft/VisualStudio/v11.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.
搜索.sqlproj文件中的问题,我看到我们正在尝试导入Schema.sqlTasks.targets文件,我假设该文件是SSDT创建的:
<Import Condition="'$(sqlDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.sqlTasks.targets" />
我在测试“ dotnet构建”时看到了相同的错误
有Windows独立选项:
https://www.nuget.org/packages/Microsoft.Data.Tools.Msbuild/10.0.61804.210
有没有人找到在Linux容器中提供SSDT的方法?
目标状态:生成dacpac的构建步骤将在容器内部进行。
当前状态:现在,我在机器上使用Visual Studio作为构建计算机,然后将dacpac复制到容器中,然后sqlpackage.exe可以发布架构。
为什么要使用Linux??这个经过docker化处理的数据库将支持在Linux容器中运行的服务堆栈,因此Windows容器并不理想。
解决方法
好吧,因此在ErikEJ和其他社区成员的帮助下,在Brett Rowberry在评论中为您提供的git hub链接上,我终于找到了解决方法。
要遵循的步骤非常简单。
-
添加您的SQL Server项目
-
添加一个.NET标准类库项目,并将其命名为“ database.build”
-
从类库项目中删除所有代码,并修改csproj文件,使其读取类似于以下内容的
网络标准2.0 -
更改解决方案的属性,以便不为所有配置构建sql server项目。
完成此操作后,您会发现仍然可以访问Visual Studio中的SQL数据库项目,并获得所有语法突出显示和智能提示,但是CI会通过链接的类库构建SQL代码并生成准备在其输出文件夹中放置一个dacpac。
我在这里写了一篇博客文章,详细解释了这一切: https://shawtyds.wordpress.com/2020/08/26/using-a-full-framework-sql-server-project-in-a-net-core-project-build/