VS Code dotnet核心C#中出错:"类型或命名空间名称'系统'无法找到",但构建成功

时间:2017-01-23 04:24:27

标签: c# windows visual-studio-code .net-core omnisharp

当尝试在C#DotNet Core MVC应用程序上使用Visual Studio Code时,我在使Visual Studio代码工作时遇到了很多麻烦。它无法找到与C#相关的任何内容,甚至标记出使用系统;'无效,说无法找到它。

但是,当我运行dotnet build时,它会成功,没有警告或错误,项目就会运行。

我的project.json:

 {
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    },
    "Microsoft.EntityFrameworkCore.Sqlite": "1.1.0",
    "Microsoft.EntityFrameworkCore.Design": {
      "version": "1.1.0",
      "type": "build"
    },
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0"
  },

  "frameworks": {
    "netcoreapp1.1": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.1.0"
        }
      },
      "imports": "dnxcore50"
    }
  }
}

有什么想法吗?我真的用这个把头发拉了出来。

7 个答案:

答案 0 :(得分:87)

有时,Visual Studio Code的C#(由OmniSharp提供支持)会变得混乱。

尝试重新启动OmniSharp。这有两种方式:

  1. 关闭并重新打开Visual Studio代码,或
  2. 打开Command Pallet并输入Restart Omnisharp
  3. 如果我们从命令行而不是从Visual Studio代码中恢复依赖关系,OmniSharp往往会感到困惑。

答案 1 :(得分:1)

好的,我已经弄明白是什么导致了这个问题。我引用了project.json文件的框架部分的错误导入。

这:

An error has occured:

应该是这样的:

object(Twilio\Exceptions\EnvironmentException)#101 (7) {
 ["message":protected]=>
 string(0) ""
 ["string":"Exception":private]=>
 string(0) ""
 ["code":protected]=>
 int(0)

我在Windows 8机器上,由于某种原因" dnxcore50"不是有效的,但" dotnet5.6"和" portable-net45 + win8"是。我将继续关注这个问题的 why ,但我现在发布这个答案以防其他人正在处理这个问题。

答案 2 :(得分:1)

在带有.NET Core 3.0的Fedora 30上的VS Code中,在使用 dotnet new worker

创建工作器项目后,我遇到了相同的问题

第一个问题是OmniSharp服务器找不到Sdks文件夹,解决方案是将此行包括在〜/ .bashrc 中:

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

然后重新启动VS Code,但是C#扩展向我显示了一些消息,如:

  

名称空间“系统”中不存在类型或名称空间名称“集合”(您是否缺少程序集引用?)

解决方案首先是在终端运行中:

dotnet build

然后使用命令面板(Ctrl + Shift + P)重新启动OmniSharp服务器:

OmniSharp: Restart OmniSharp

然后我重新启动VS Code和C#扩展,所有依赖项都可以正常工作。

答案 3 :(得分:1)

我在带有 OmniSharp 和 Mono 的 mac 中使用 VS Code,执行以下操作后问题就消失了:

对于安装了 Mono 的 MacOS 和 Linux 用户,这意味着您需要将 omnisharp.useGlobalMono 设置为从不,直到带有 MSBuild 16.7 的 Mono 版本发布。

答案 4 :(得分:0)

出现另一个有关“使用系统”的错误的可能原因是将.vscode目录存储在git存储库中(我没有将其添加到.gitignore中)。

使用VSCode打开解决方案文件夹会产生上述的跨版本问题,只需删除.vscode目录即可解决。

答案 5 :(得分:0)

此问题的答案为:https://github.com/OmniSharp/omnisharp-vscode/issues/2147。 (这是一个长线程。一直滚动到底部。)

答案 6 :(得分:0)

如果收到此错误,则可能缺少包裹。

“找不到类型或名称空间名称'System'”

要添加软件包,可以在终端中运行以下命令:

dotnet add package

示例:将Newtonsoft.Json NuGet软件包添加到项目中:

dotnet add package Newtonsoft.Json

此后,转到弯曲的行,然后通过单击灯泡添加缺少的参考。

您还可以安装Nuget软件包管理器扩展,以查找所需的软件包。查看此答案以了解更多信息:

Install a Nuget package in Visual Studio Code