Ошибка в кодовом ядре VS Code dotnet core С#: "Тип или имя пространства имен" Система "не удалось найти", но сборка завершается успешно

При попытке работать с кодом Visual Studio в приложении С# DotNet Core MVC у меня возникает много проблем с получением визуального кода студии для работы. У него возникают проблемы с поиском чего-либо, связанного с С#, отмечая даже "Использование системы"; как недействительный, заявив, что он не может его найти.

Однако, когда я запускаю сборку 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"
    }
  }
}

Есть идеи? Я действительно вытаскиваю свои волосы с этим.

Ответы

Ответ 1

Иногда С# для кода Visual Studio (работает от OmniSharp) запутывается.

Попробуйте перезапустить OmniSharp. Вот два способа:

  1. Закройте и заново откройте код Visual Studio или
  2. Откройте командный поддон и введите Restart Omnisharp.

OmniSharp имеет тенденцию смущаться, если мы восстанавливаем зависимости из командной строки, а не из кода Visual Studio.

Ответ 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" есть. Я буду продолжать смотреть на то, почему для этого вопроса, но я отправляю этот ответ сейчас, если кто-то другой справляется с этой проблемой.

Ответ 3

В VS Code на Fedora 30 с .NET Core 3.0 у меня возникла та же проблема после создания рабочего проекта с новым рабочим dotnet

Первая проблема заключалась в том, что сервер OmniSharp не нашел папку Sdks, и решение было включить эту строку в ~/.bashrc:

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

затем перезапустите VS Code, но расширение С# покажет мне несколько сообщений вроде:

Тип или имя пространства имен "Коллекции" не существует в пространстве имен "Система" (отсутствует ссылка на сборку?)

Решение было, во-первых, в терминале запустить:

dotnet build

затем перезапустите сервер OmniSharp с помощью палитры команд (Ctrl + Shift + P):

OmniSharp: Restart OmniSharp

затем я перезапускаю VS Code и расширения С#, и все зависимости работают нормально.

Ответ 4

Другая возможная причина получения ошибок, связанных с использованием системы, - это сохранение каталога .vscode в репозитории git (я не добавляю его в .gitignore).

Открытие папки решения с помощью VSCode может создать проблемы с несколькими версиями, как описано выше, и может быть решено простым удалением каталога .vscode.