在构建服务器上构建时缺少 .NetStandard 项目的包含

Missing include for .NetStandard project when building on build server

由于有兴趣将我们的服务器系统迁移到 .Net 核心,我目前正在工作中试用 VS2017。 我已经将几个小工具项目切换到目标 .NetStandard 1.2(重新创建和移动文件),并且一切都在本地构建。

但是,当我在我们的 TeamCity 10.0.5 服务器上请求构建时,构建失败并显示以下消息(项目名称已编辑):

E:\TeamCity\buildAgent1\work7cb2a824afdbda\Source\{PROJECT FOLDER}\{PROJECT}.csproj error MSB4019: The imported project "C:\Program Files (x86)\Microsoft Visual Studio17\BuildTools\MSBuild\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.props" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.

文件夹 Microsoft.NET.Sdk 确实存在于我的机器上,但不在构建服务器上。

我已经安装了 Build Tools for Visual Studio 2017,并安装了 .Net Core 1.1 SDK,以及构建配置使用使用 VS2017 的 Visual Studio (sln) 跑步者。

我少了哪一套tools/installer?

更新: 我已经尝试使用 Full Visual Studio 2017 安装程序(社区),包 .NET Framework 4.5 Targeting Pack 添加了相关文件夹。 奇怪,因为服务器上已经安装了 4.5 Multi-Targeting 包。

将 Build agent 设置为使用完整的 VS2017 社区安装后,出现了一系列其他问题,例如在相关项目中找不到 System 命名空间。

添加 dotnet restore 构建步骤修复了此问题,但其他名称空间丢失(缺少安装)等。

使用 .NETStandard 项目构建完整的框架解决方案似乎依赖于 .NET Core 来构建,我不明白,因为我不是针对 .NET Core。

尝试从此处安装 .NET Core SDK: .NET Core Downloads

并且,如有必要:

set MSBuildSDKsPath=C:\Program Files\dotnet\sdk.0.1\Sdks

我通过安装 .NET Core SDK 并添加 MSBuildSDKsPath 解决了这个问题。我还将不同的 SDK 从我本地安装的 visual studio 复制到构建服务器。截至目前,您必须在服务器上安装完整的 Visual Studio 安装才能在没有这些权宜之计修复的情况下使构建工作。

  1. 安装 .NET Core SKD from here.

  2. 在cmd中将MSBuildSDKsPath添加到环境变量中。

    设置 MSBuildSDKsPath=C:\Program Files\dotnet\sdk.0.1\Sdks

  3. 从本地企业或专业安装的 visual studio,将所需的 sdk 文件复制到您的 ms 构建服务器。将此文件夹的内容复制到本地 Visual studio:

    C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild\Sdks

    到构建服务器上的这个文件夹:

    C:\Program Files (x86)\Microsoft Visual Studio17\BuildTools\MSBuild\Sdks

  4. 关注 ticket for this bug in github 以在解决此构建工具问题时收到通知。

如果您只对 SDK 项目使用解决方案,那么您只需要使用 dotnet restore && dotnet build 而不是 nuget restore & msbuild。 但如果它混合解决方案(旧项目和 SDK 项目)你将不得不等到 VS15.3 发布