【问题标题】:How to use dotnet (.NET Core) to pack a sln file that contains a sql project?如何使用 dotnet (.NET Core) 打包包含 sql 项目的 sln 文件?
【发布时间】:2017-08-27 20:20:35
【问题描述】:

我有一个没什么特别的 .NET Core 解决方案,我们称之为Application.sln,它包含 12 个 C# 项目和 1 个 SQL 项目。在 Visual Studio 2017 中,我构建所有项目都没有问题,但是当我前往命令行使用 dotnet pack Application.sln --no-build 打包项目时,我立即遇到了 sql 项目的问题。这是错误:

error MSB4019: The imported project "C:\Program Files\dotnet\sdk\1.1.0\Microsoft\VisualStudio\v14.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

破译后发现第一部分C:\Program Files\dotnet\sdk\1.1.0来自我使用dotnet而不是msbuild打包解决方案,由于SSDT无法安装到dotnet文件夹中,所以会失败。

最好,我希望它忽略 .sqlproj 项目,只打包 .csproj 项目,因为之后我将单独处理 sql 项目,但我看不到任何方法可以做到这一点。有办法吗?看来我不能使用 MSBuild 样式的通配符作为 dotnet pack (***.csproj) 的参数,因为这会引发单独的错误。

我尝试过使用 msbuild /t:pack 但这给了我其他问题(它说目标“pack”在项目中不存在)。

有人对我有什么建议吗?如果有帮助,我想通过 TeamCity 来完成,但我的开发机器上也存在所有这些问题。

【问题讨论】:

  • 可以卸载 SQL 项目吗?
  • 我可以,但最终目标是在 CI 环境中运行,我认为这不是一个可行的解决方案。

标签: c# msbuild .net-core


【解决方案1】:

首先,如果您想使用dotnet 工具,您需要创建仅包含 c# 项目的第二个解决方案。如果您不想这样做,您始终可以直接从 VS 2017 开发人员命令提示符中使用 msbuild 命令(dotnet restore=> msbuild /t:Restore 等)

Pack 目标仅适用于具有集成 NuGet 包支持的项目,这通过使用 Microsoft.NET.Sdk SDK(“新”csproj 格式)或在与其兼容的项目中使用 NuGet.Build.Tasks.Pack nuget 包来实现.

如果您想在一个解决方案上调用 dotnet pack / msbuild /t:Pack 而不创建没有 sql 项目的第二个解决方案,则所有项目都必须包含一个打包目标。

一种简单的方法是在解决方案旁边创建一个Directory.Build.props 文件,其中包含以下内容:

<Project>
  <Target Name="Pack" />
</Project>

此文件将在目录层次结构中所有项目的开头自动导入,并在其中定义一个空的Pack 目标。然后,使用 .NET SDK 的项目将使用实际的 NuGet 包目标覆盖此目标。所以msbuild /t:Pack 将在 SQL 项目上调用这个空目标,在 c# 项目上调用原始 NuGet Pack 目标。

【讨论】:

  • 最后,我不得不求助于使用 2 个 sln,这不是我解决此问题的首选方法。我尝试了您建议的其他修复方法,但这似乎在 TeamCity 中不起作用。感谢您帮助确认两个 sln 是获得所需行为的唯一方法。
  • 有趣。只要周围没有其他 Directory.Build.props 文件,解决方法就应该有效,但我只从命令行尝试过,而不是形成 CI 设置。
  • 仅供参考,您还可以使用 msbuild 脚本来执行所有必要的任务,而不必过多依赖配置命令。gist.github.com/dasMulli/69f5303aa79a8cd4060e44891c90fd2d
  • 感谢您的帮助,随着 .NET Core 的成熟,我可能会在稍后再次参考这个问题,但与此同时,我实际上使用 OctoPack 找到了一个相当不错的解决方案(打包的全部原因首先是 TeamCity 打包项目供 OctopusDeploy 部署),因为它处理 .sqlprojs 没有问题。不过再次感谢!
猜你喜欢
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2017-09-26
  • 2018-10-21
  • 2018-05-21
  • 1970-01-01
相关资源
最近更新 更多