MSBUILD抛出错误:找不到指定的SDK"Microsoft.NET.Sdk"

Lui*_*aia 27 .net c# msbuild .net-core

我正在尝试使用msbuild命令行构建解决方案,并且我不断收到此错误:

error MSB4236: The SDK 'Microsoft.NET.Sdk' specified could not be found.

msbuild的版本是microsoft visual studio 2017工具的最新版本.我正在使用Windows Server 2012 R2,该项目使用.NET Core 2.0.

这是我正在使用的命令:

msbuild.exe /p:Configuration=Release /t:restore C:\Projects\MyProject.sln

完整日志:

    Microsoft (R) Build Engine version 15.3.409.57025 for .NET Framework
    Copyright (C) Microsoft Corporation. All rights reserved.

    Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
    Build started 9/16/2017 3:09:03 PM.
    Project "C:\Projects\MyProject.sln" on node 1 (restore target(s)).
    ValidateSolutionConfiguration:
      Building solution configuration "Release|Any CPU".
    Project "C:\Projects\MyProject.sln" (1) is building "C:\Projects\Kernel\Kernel.csproj" (2) on node 1 (restore target(s)).
    C:\Projects\MyProject.sln" (1) is building "C:\Projects\Kernel\Kernel.csproj : error MSB4236: The SDK 'Microsoft.NET.Sdk' specified could not be found.
    Done Building Project "C:\Projects\MyProject.sln" (1) is building "C:\Projects\Kernel\Kernel.csproj" (restore target(s)) -- FAILED.

    Build FAILED.
    "C:\Projects\MyProject.sln" (restore target) (1) ->
"C:\Projects\Kernel\Kernel.csproj" (restore target) (2) ->
  C:\Projects\Kernel\Kernel.csproj : error MSB4236: The SDK 'Microsoft.NET.Sdk' specified could not be found.

0 Warning(s)
    11 Error(s)
Run Code Online (Sandbox Code Playgroud)

Seb*_*eth 29

在使用.Net Core 2.0安装并且看起来搞砸了之后我遇到了这个错误.我会得到同样的错误dotnet restore,dotnet build或者dotnet msbuild.基本上,涉及.Net Core和msbuild的任何事情.

发生错误是因为MSBuildSDKsPath环境变量仍然指向旧的.Net Core 1.1 SDK.

为了解决这个问题,我手动将MSBuildSDKsPath环境变量设置为指向2.0.0的SDK路径,对于x64我来说,这是在:C:\Program Files\dotnet\sdk\2.0.0\Sdks.

基本上,如果你有Sdk="Microsoft.NET.Sdk"你的.csproj,然后用相同名称的文件夹应该在你的存在MSBuildSDKsPath位置.

  • 谢谢,我不得不创建一个新的系统环境变量,因为我没有`MSBuildSDKsPath`,然后在其中`C:\ Program Files \ dotnet \ sdk \ 2.1.500 \ Sdks`中放置了最新的sdk路径。 (4认同)
  • 该错误仅出现在我们的 TeamCity 构建服务器上。仅使用 .Net Core SDK 安装 MS Build Tools 还不够。我还必须创建“MSBuildSDKsPath”并将值设置为“C:\Program Files\dotnet\sdk\3.1.101\Sdks”。谢谢@塞巴斯蒂安 (3认同)
  • 此处使用 TeamCity 并忘记安装 **.NET Core 构建工具** 作为 Visual Studio (MS) 构建工具的一部分。不需要路径“MSBuildSDKsPath”并且值得庆幸的是,因为我不想在所有构建代理上维护该路径。 (2认同)
  • 使用此解决方案意味着每次更新到新的 SDK 时都必须更改变量。有更好的解决方案吗? (2认同)

Yas*_*sel 13

安装 VS 工具时,您可能缺少某些组件

  1. 下载并运行Visual Studio 2019 的构建工具。(在 VS 下载页面,转到Tools for Visual Studio 2019,然后单击下载Build Tools for Visual Studio 2019

  2. Visual Studio Build Tools 2019或您的实例上选择修改。 在此处输入图片说明

  3. 选择选项卡单个组件并检查.NET Core SDK组件 在此处输入图片说明

  • 我已经解决了这个问题,我错过了“.NET Core SDK”只是被重命名为“.NET SDK”,所以实际上我很好。重新启动 VSC 后,构建问题得到解决。 (4认同)
  • VSC 2019 (16.11.4) 在这里,由于某种原因,我缺少“.NET Core SDK”条目。我一直在安装“.NET SDK”,但问题仍然出现。 (2认同)

paw*_*zan 11

对我来说,解决方案是在 global.json 文件中设置 sdk 版本: 解决方案项 global.json

并指定 C:\Program Files\dotnet\sdk 文件夹中存在的正确版本。VS 安装程序卸载了以前版本的 .NET Core 3.0.100 并安装了新的 3.1.100,因此我不得不将其更改为:

{  "sdk": {    "version": "3.0.100"  }}
Run Code Online (Sandbox Code Playgroud)

{  "sdk": {    "version": "3.1.100"  }}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,创建 global.json 的命令是“dotnet new globaljson --sdk-version 3.1.100”。请参阅 https://docs.microsoft.com/en-us/dotnet/core/tools/global-json (4认同)

Hyp*_*tum 10

对我来说,更新 V​​isual Studio 构建工具导致了“找不到 SDK”错误。

解决方案:运行Visual Studio安装程序,修改Visual Studio(构建工具)安装,并确保选择以下工作负载:

检查“.NET构建工具”


小智 6

我在 Mac OS 中遇到此问题,在使用 docker 容器和 Azure 时,会出现此问题,因为 docker bash 覆盖了 MSBuildSDKsPath,因此不要更改任何代码,只需退出并重新启动 IDE(Visual Studio Mac)并再次运行即可


小智 6

在 Windows 10 中安装 Visual Studio 2022 后,当我打开解决方案时,我开始收到此错误。该解决方案包含 .NET Framework 4.8 和 .NET Standard 2.0 项目的混合,并且错误出现在 .NET Standard 2.0 项目上。我之前安装了 Visual Studio 2019 和 2019 构建工具。

问题是我同时dotnet安装了 x86 和 x64,并且两者都在我的系统 PATH 环境变量中:

C:\Program Files (x86)\dotnet
C:\Program Files\dotnet
Run Code Online (Sandbox Code Playgroud)

我执行了以下步骤来修复此错误:

  • 卸载VS2019
  • 卸载VS2019构建工具
  • 从环境变量中删除了 x86 路径
  • 从我的计算机中删除了文件夹“C:\Program Files (x86)\dotnet”
  • 重新启动VS2022

我认为重要的部分是从环境变量中删除 x86。其他步骤只是“清理”。