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

19

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

11个回答

39
尝试以下解决方法:在项目文件夹中添加一个名为omnisharp.json的文件,并将以下内容复制进去。
{
    "MsBuild": {
        "UseLegacySdkResolver": true
    }
}

然后重新启动Visual Studio Code


正在为新项目工作,但旧项目无法更新到新的 .net core 版本。有什么建议吗? - Varun Verma
对于这种情况,您可以在项目文件夹中添加一个名为“global.json”的文件,并包含以下内容: { "sdk": { "version": "2.1.200" } }其中版本键的值是目标SDK的版本。 - Sang Au
2
我有一个梦想,在那个梦境中,每次我打开VS Code时,OmniSharp都能正常工作,没有因更新而出现的意外情况... 顺便说一句,global.json的解决方案对我没有起作用,但是omnisharp.json却可以。 - amedina
为什么我们需要这个,为什么微软的代码生成器不会生成它,如果它是必需的 -.- 他们甚至不能让“Hello World”工作。 - Dživo Jelić

11

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

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

使用以下命令也可以解决相同的问题:dotnet nuget locals all -c


7

Evgy提供的答案仅适用于.NET Core Preview 3。如果你想使修复程序适用于.NET Core 3.0或更高版本,那么可以在.bashrc文件中添加以下行(假设您使用的是Linux):

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

这是非Ubuntu(非Mint等)Linux的最佳答案,或者如果您使用的不是snap安装SDK,则可以使用此方法。 但是,如果您使用了snap,则您的SDK将在此处:/snap/dotnet-sdk/current/sdk/$(dotnet --version)/Sdks。 使用与上面相同的导出,但是使用此~/snap路径。 浏览到那里,或者上面的/usr/share...路径查找SDK,然后将适当的导出添加到您的bash启动文件(.bashrc)中。 - IdahoB

5

我有这个问题,但以上的解答都不适用于我,我不知道为什么会出现这个问题,但我找到了一个小技巧来解决。

打开终端并进入您的项目目录,执行以下命令:

code .

是的!从终端打开VSCode解决了我的问题


关闭并重新打开VSCode的终端就解决了问题。 - Mohsen

4

我在使用DotNet Core 3.0和VS Code时遇到了问题。智能感知功能无法正常工作。

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

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

以下是有关Omnisharp GitHub的一些答案,我安装了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 Studio\2019\Professional\MSBuild.disabled\Current\Bin

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


1
我知道它已经被投票否决了,但坦白地说,这是唯一解决我的错误的选项。 - Doug
我在想 UseLegacySdkResolver 是否也能解决这个问题,同时我也很想知道 VS 2019 是否引起了这个问题。在 Github 上有很多类似的问题,很难跟踪。 - KCD

2

1
  • 现在应该是 v1.18.0-beta7: https://github.com/OmniSharp/omnisharp-vscode/releases
  • 如果你只是在使用旧项目,请尝试向它们的根目录添加一个适当的global.json文件,通过执行dotnet new globaljson --sdk-version 2.2.100命令。否则,它们将默认使用.NET Core 3x SDK。如果你有一个global.json,请检查其内容,并确保你正在使用正确的版本。你可以使用dotnet --list-sdks命令找到已安装的版本。
  • 最好在这里报告你的问题,这样他们就可以为下一个beta版本修复它。

1

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

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

非常好用!这也是Mint Linux 20.1的解决方案。问题在于snap没有将SDK安装在/usr/share/dotnet/sdk/$(dotnet --version)/Sdks位置,而是安装在上面显示的/snap/...路径中。上述3个命令将导出添加到您的bash shell启动文件中,以便每次启动shell时都会导出$MSBuildSDKsPath env变量。OmbniSharp警告/错误说.csproj文件无效,并抱怨找不到任何SDK消失了! - IdahoB

0

这可能非常愚蠢,但在经过几个小时的谷歌搜索后,我放弃了,并编写了自己的构建任务来调用dotnet build而不是msbuildtasks.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
        }

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接