【问题标题】:Error in Visual Studio Code Dotnet Core C#: "The type or namespace name 'System' could not be found", but build succeedsVisual Studio Code Dotnet Core C# 中的错误:“找不到类型或命名空间名称‘系统’”,但构建成功
【发布时间】:2017-06-07 12:59:59
【问题描述】:

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

但是,当我运行 Dotnet 构建时,它会成功且没有警告或错误,并且项目会运行。

我的项目.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"
    }
  }
}

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

【问题讨论】:

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


    【解决方案1】:

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

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

    1. 关闭并重新打开 Visual Studio Code,或
    2. 打开命令托盘并输入Restart Omnisharp

    如果我们从命令行而不是从 Visual Studio Code 中恢复依赖项,OmniSharp 往往会变得混乱。

    【讨论】:

    • 我确实尝试重新启动omnisharp,但无济于事。我什至尝试重新安装整个 .net 核心 SDK 和运行时。我认为这个项目的某个地方有些古怪,但我看不到。我希望我可以调试omnisharp 来告诉我为什么它找不到系统...
    • 有时你必须在 VS 代码中 SAVE ALL 文件,然后才能执行dotnet build
    • 我遇到了一个问题,即不存在的命名空间不断弹出这有帮助。
    • 确实,就像我认为的大多数微软产品一样,它需要某种重启。太糟糕了,VScode 有潜力,但是这些动作使它毫无用处。事实上,我所做的大多数代码更改都没有被采纳,就像它们在 IntelliJ 或 Eclipse 中对 Java 所做的那样。所以最好使用 vim ;)。不过,感谢您的回答,它奏效了。注意,添加命令托盘的方便快捷方式是 ctrol + shift + P。
    【解决方案2】:

    好的,我已经找出导致问题的原因。我为 project.json 文件的框架部分引用了错误的导入。

    这个:

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

    应该是这样的:

    "frameworks": {
        "netcoreapp1.1": {
          "imports": [
            "dotnet5.6",
            "portable-net45+win8"
          ]
        }
      } 
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        在带有 .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# 扩展会显示一些消息,例如:

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

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

        dotnet build
        

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

        OmniSharp: Restart OmniSharp
        

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

        【讨论】:

        • 完美!环境对我有用 :) 非常感谢!
        • 我在这个问题上工作了将近 4 个小时,这是唯一对我有用的东西。非常感谢!
        • 是的,构建后重新启动 OmniSharp 是这里的关键
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          “找不到类型或命名空间名称‘System’”

          要添加一个包,你可以在终端中运行这个命令:

          dotnet add package
          

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

          dotnet add package Newtonsoft.Json
          

          之后,转到波浪线,并通过单击灯泡添加缺少的参考。

          您还可以安装 Nuget 包管理器扩展来找出您需要的包。请参阅此答案以了解更多信息:

          Install a Nuget package in Visual Studio Code

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-09-27
              相关资源
              最近更新 更多