在 VSCode OmniSharp 扩展中找不到指定的 SDK 'Microsoft.NET.Sdk.Web'

The SDK 'Microsoft.NET.Sdk.Web' specified could not be found in VSCode OmniSharp extension

我已经在 VSCode 上安装了 dotnet core 3 sdk 和 OmniSharp 1.18 扩展 但是 OmniSharp 有一个错误: Microsoft.Build.Exceptions.InvalidProjectFileException: 找不到指定的 SDK 'Microsoft.NET.Sdk.Web'。

  • 此时应该是v1.18.0-beta7https://github.com/OmniSharp/omnisharp-vscode/releases
  • 此外,如果您只是在使用旧项目,请尝试通过发出 dotnet new globaljson --sdk-version 2.2.100 命令将适当的 global.json 文件添加到它们的根目录。否则他们将默认使用 .NET Core 3x SDK。如果您有 global.json,请检查其内容并确保您使用的是正确的版本。您可以使用 dotnet --list-sdks 命令找到已安装的版本。
  • 最好 report your issue here 以便他们可以在下一个测试版中修复它。

尝试以下解决方法:

将名为 omnisharp.json 的文件添加到您的项目文件夹,内容如下

{
    "MsBuild": {
        "UseLegacySdkResolver": true
    }
}

然后重启Visual Studio代码

您需要从 Visual Studio 安装程序安装“.Net Core 构建工具”,如此处所述 - https://github.com/OmniSharp/omnisharp-roslyn/issues/1311#issuecomment-428361674

也可以用chocolatey安装:

choco install visualstudio2017-workload-netcorebuildtools

如果您使用的是 Linux 或 Mac,请将路径添加到 .bashrc 中的 sdk 文件夹(或您想要的任何其他位置):

export MSBuildSDKsPath=$HOME/soft/dev/dotnet/sdk/3.0.100-preview3-010431/Sdks

同样的行为也可以用这个命令解决:dotnet nuget locals all -c

Evgy 的回答将特别适用于 .NET Core Preview 3,但如果您希望修复程序适用于 .NET Core 3.0 或更高版本的发布版本,则可以将以下行添加到您的 .bashrc文件(假设你在 Linux):

export MSBuildSDKsPath="/usr/share/dotnet/sdk/$(dotnet --version)/Sdks"

我在使用 DotNet Core 3.0 和 VS Code 时遇到了这个问题。智能感知对我不起作用。

我安装了 Visual Studio 2019,这导致 Omnisharp 从以下位置获取 MsBuild:

C:\Program Files (x86)\Microsoft Visual Studio19\Professional\MSBuild\Current\Bin

根据 Omnisharp GitHub 上的一些答案,我从以下 link 安装了 Visual Studio Build Tools 2019: https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

为了防止 Omnisharp 从以前的路径获取 MsBuild,我将 MsBuild 文件夹重命名为 MsBuild.disabled,这样路径就变成了:

C:\Program Files (x86)\Microsoft Visual Studio19\Professional\MSBuild.disabled\Current\Bin

现在,当我重新启动 VS Code 时,Omnisharp 从路径 C:\Program Files (x86)\Microsoft Visual Studio19\BuildTools\MSBuild\Current\Bin 而不是以前的路径获取 MsBuild。错误消失了,intellisense 现在可以正常工作了。

在项目中的global.json文件中确保sdk版本与您在系统上安装的版本相同。

Ubuntu [20.04] Snap 用户的 Neits 解决方案。

echo 'export MSBuildSDKsPath="/snap/dotnet-sdk/current/sdk/$(dotnet --version)/Sdks"' >> ~/.bashrc
source ~/.bashrc
echo $MSBuildSDKsPath

这可能非常愚蠢,但在用谷歌搜索这个问题几个小时后,我放弃了,只是编写了我自己的构建任务来调用 dotnet build 而不是 msbuild 进入 tasks.json

        {
            "label": "build",
            "type": "shell",
            "command": "dotnet",
            "args": [
                "build",
            ],
            "group": "build",
            "presentation": {
                "reveal": "silent"
            },
            "problemMatcher": "$msCompile"
        }

这是我在 launch.json 中的启动配置:

        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/net5.0/${workspaceFolderBasename}.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "console": "integratedTerminal",
            "stopAtEntry": false
        }

这可能不是正确的方法,但它让我运行我的代码并使用调试器的所有功能,所以我想这很好够了。

我有这个问题,上面的 none 个答案对我有用,我不知道为什么会这样 但我发现了一个小技巧来解决这个问题。

打开您的终端并转到您的项目目录并执行此命令

code .

是的!从终端打开 vscode 为我解决了这个问题

唯一对我有用的是退出 VSCode(我在 Mac)并重新安装 .NET SDK。