【问题标题】:How to build .sqlproj projects using "dotnet" tool?如何使用“dotnet”工具构建 .sqlproj 项目?
【发布时间】:2020-09-18 06:45:00
【问题描述】:

无法使用“dotnet”命令行工具构建 .Net .sqlproj。这是错误:

dotnet\sdk\3.1.300\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found

我已安装 SSDT 工具,但在上述位置不可用。

注意:这是使用 Visual Studio 和 MSBuild 没有任何错误的建筑物

【问题讨论】:

  • 您想使用dotnet build .sqlproj的具体原因是什么?为什么不在 azure-devops 中为 CI 使用 VS build task/msbuild task?
  • 我们发现 dotnet CLI 在命令和参数方面更加成熟,但它似乎无法解决许多依赖关系。我们可能需要切换到其他 CLI,例如 MSBuild。

标签: .net asp.net-mvc azure-devops sql-server-data-tools dotnet-tool


【解决方案1】:

如何使用“dotnet”工具构建 .sqlproj 项目?

抱歉,但据我所知,目前这是不支持方案。 dotnet cli 无法使用 old-framework style 项目文件构建数据库项目,这是设计使然。

至于使用 Visual Studio 和 MSBuild 构建没有任何错误但使用 dotnet 失败的原因。请检查您的SSDT安装路径,应该在pathC:\Program Files (x86)\Microsoft Visual Studio\2019\VSEditon\MSBuild\Microsoft\VisualStudio\v16.0\SSDT下。

SSDT 安装为 MSBuild(VS 构建工具)或 VS 中的 MSBuild 的子模块,因此在通过 VS/MSbuild 构建它时效果很好。但是dotnet cli 不知道在哪里可以找到这个位于 MSBuild 文件夹子文件夹下的模块,所以它会抛出错误。

在 github 上曾经有过 a discussion 关于这个问题,在我看来,支持通过 Dotnet 构建 SQLProj 的功能还没有实现。如果你对该功能感兴趣,我建议你可以在那里开一张新票来发表你的想法。

【讨论】:

  • 感谢您的回答。您可能是对的,但是为什么我们在 dotnet CLI 中没有这样的支持,因为这是构建项目的非常基本的依赖项。实际上,我正在开发一些通用的东西,它可以使用 dotnet CLI 构建所有类型的项目,但它似乎不支持所有类型的项目。我们有更多示例,其中某些工具依赖项未在 dotnet CLI 中得到解决。例如 'dotnet\sdk\3.1.100\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" 未找到'
  • 我知道这种依赖是可以解决的,但是我们每次都需要放置所有这些工具吗?或者更好的解决方案是使用 MSBuild?
  • 嗯,我认为更好的解决方案是使用Msbuild。它支持构建项目,如 C++、C#(.net core/standard/framework)、VB.net、数据库项目……而 dotnet 目前更适合 .net core 和 .net 标准项目(新的 SDK 格式项目)。此外,dotnet build 不支持 C++ 和其他语言...除非您的整个解决方案针对 .net 核心/标准项目,否则我不推荐 dotnet :-)
  • @Raza 当然,如果 dotnet core 可以很好地构建所有项目类型会更好,但目前还不支持。你可以把你的想法here发给团队,希望对你有帮助~
  • @Raza 这有点板,因为它必须需要许多关于差异的详细信息。在我看来,1.msbuild 适用于 windows,而 dotnet cli 适用于跨平台(即使在 linux 中)。 2.Msbuild几乎可以构建VS IDE(它是VS IDE的构建引擎)支持的所有项目类型,而dotnet cli只支持.net core和standard等项目,可能也是.net framework的一部分。所以当我需要跨平台工作时我选择 .net core,当我从 VS 处理项目时选择 VS build/msbuild(如果我很高兴,我也可以使用 dotnet 来构建那些 .net core/standard )
【解决方案2】:

自 2020 年 3 月起,现在可以使用 MSBuild.Sdk.SqlProj 包。 从技术上讲,它不是构建sqlproj 文件本身,而是基于csproj 的等效版本来生成DACPAC。它目前具有一些优势,例如跨平台构建,并且能够构建整个文件夹而不是遗漏一个您总是忘记手动添加到 sqlproj 的文件。当前的缺点是由于没有dbmdl 缓存,构建速度较慢,并且至少用于将更改从外部数据库或 DACPAC 导入项目源的 IDE/工具支持较少。

【讨论】:

  • 这是一个 MSFT 支持的项目吗?
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2020-07-14
  • 2017-07-10
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多