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

时间:2019-02-26 13:49:43

标签: asp.net-core visual-studio-code omnisharp

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

10 个答案:

答案 0 :(得分:17)

尝试以下解决方法:

将名为 omnisharp.json 的文件添加到您的项目文件夹中,其中包含以下内容

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

然后重新启动Visual Studio代码

答案 1 :(得分:2)

如果您在Linux或Mac中,将路径添加到.bashrc中的sdk文件夹中或所需的位置:

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

答案 2 :(得分:2)

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

打开你的终端并进入你的项目目录并执行这个命令

code .

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

答案 3 :(得分:1)

  • 此时应为v1.18.0-beta7https://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命令找到已安装的版本。
  • 最好report your issue here,以便他们可以在下一个Beta版本中对其进行修复。

答案 4 :(得分:1)

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

也可以与Chocolatey一起安装:

   Policies:
    #    Readers:
    #        Type: Signature
    #        Rule: "OR('OrdererMSP.member')"
    #    Writers:
    #        Type: Signature
    #        Rule: "OR('OrdererMSP.member')"
    #    Admins:
    #        Type: Signature
    #        Rule: "OR('OrdererMSP.admin')"
    Policies:
     Readers:
        Type: ImplicitMeta
        Rule: "ANY Readers"
     Writers:
        Type: ImplicitMeta
        Rule: "ANY Writers"
     Admins:
        Type: ImplicitMeta
        Rule: "MAJORITY Admins"

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

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

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

const getAllProfiles = () => {
return new Promise((resolve, reject) => {
    Profile.find({activeProfile:true },(profileErr,profileRes)).populate('user').exec((profileErr,profileRes)=>{
        if (profileErr) {
            console.log('profileErr: ', profileErr);
            reject({ status: 500, message: 'Internal Server Error' });
        } else {
            resolve({ status: 200, message: 'User Profile fetch Successfully.', data: profileRes })
        }
    });
});
}

在Omnisharp GitHub上遵循一些答案之后,我从以下链接安装了Visual Studio Build Tools 2019: https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

为防止Omnisharp从以前的路径获取MsBuild,我将C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin 文件夹重命名为MsBuild,以便路径变为:

MsBuild.disabled

现在,当我停止使用VS Code时,Omnisharp从路径C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild.disabled\Current\Bin 而不是以前的路径获取MsBuild。错误消失了,智能感知现在可以正常工作了。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

需要针对Ubuntu [20.04] Snap用户的解决方案。

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

答案 9 :(得分: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
        }

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