【发布时间】:2025-12-17 08:40:01
【问题描述】:
我正在构建一个托管在 Ubuntu 环境中的 ASP.NET Core 2.0 Web API 应用程序。到目前为止,我在 Ubuntu 中构建和运行(用于 .NET Core 应用程序)的东西已经取得了巨大的成功。
对于数据库,我的解决方案中包含了一个 SqlProj。该项目包括典型的东西,例如表、SP 和部署前/后脚本。我正在使用以下命令(在我的基于 Windows 的开发机器上)构建和部署这个项目:
msbuild .\MyProject.DB.sqlproj /t:Build /t:Publish /P:SqlPublishProfilePath="./PublishProfiles/MyProject.DB.publish.xml"
当我采用这种方法时,一切都会正确构建和部署;但是,由于我将利用针对 Ubuntu 环境的 .NET Core CLI 命令 + CI/CD,所以我想做一些类似的事情:
dotnet msbuild .\MyProject.DB.sqlproj /t:Build /t:Publish /P:SqlPublishProfilePath="./PublishProfiles/MyProject.DB.publish.xml"
在 Windows 中,我立即收到错误消息:
error MSB4019: The imported project "C:\Program Files\dotnet\sdk\2.1.4\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.
基本上,我要问的是如何在 Ubuntu 环境中成功构建和部署 SqlProj 项目。我试过谷歌搜索,但到目前为止我的运气为零。我发现的所有类似问题都适用于正在编辑 .proj 文件以针对其 VS 文件夹的 SSDT 的个人。所有这些人都在解决 Windows 中的问题。这种方法在 Ubuntu 中不起作用,因为目标文件使用 Windows 注册表项。
编辑:我知道需要 SSDT 才能使用 MSBuild 执行此类部署。我没有发现任何证据表明在 Ubuntu 中甚至可以安装/使用 SSDT。如果不是,也许有替代解决方案?
仅供参考,我知道在 EF Core 中使用代码优先方法是可能的。我正在尝试采用原始 SP 方法(以及利用索引)并使用 SqlProj 跟踪我的所有代码。这将全部从 Git 存储库中存储和 CI/CD。
【问题讨论】:
-
如何在 Ubuntu 上编译 sqlproj?我无法克服 msbuild 错误。
-
@harsimranb,我无法在 Ubuntu 中构建它。不幸的是,这就是问题所在。 MSBuild 目前不适用于 .SqlProj。我还没有找到解决办法。
标签: sql-server ubuntu msbuild .net-core sql-server-data-tools