Поделиться через


Ошибка компилятора CS0518

Предопределенный тип "type" не определен или не импортирован

Замечание

Разрешение этой ошибки зависит от того, используете ли вы современный проект в стиле SDK (.csproj файлы, начинающиеся с <Project Sdk="Microsoft.NET.Sdk">) или устаревших форматов проектов. Проекты в стиле SDK управляют ссылками среды выполнения автоматически с помощью <TargetFramework> свойства.

Основной причиной этой проблемы является то, что проект не может получить доступ к предопределенным типам из библиотеки среды выполнения .NET. В современных проектах SDK-стиля это обычно связано с неправильной или отсутствующей спецификацией <TargetFramework>. В устаревших проектах эта проблема вызвана неимпортированием mscorlib.dll, который определяет все пространство имен System. Это может быть вызвано одним из следующих причин:

Замечание

Это предупреждение сообщается только во время явных операций сборки или перестроения . Он не отображается во время ввода в интегрированной среде разработки в рамках диагностики IntelliSense. Это означает, что если вы исправите предупреждение с помощью поля или удалите его, предупреждение может сохраняться в списке ошибок, пока не создадите или перестроите проект еще раз.

  • Указан параметр NoStandardLib из компилятора командной строки. Параметр NoStandardLib предотвращает импорт mscorlib.dll. Используйте этот параметр, если вы хотите определить или создать пространство имен системы для конкретного пользователя.

  • Указан неверный mscorlib.dll.

  • Существует поврежденная установка среды выполнения общего языка (CLR) Visual Studio .NET или .NET Framework.

  • Оставшиеся компоненты из более ранней установки, несовместимые с последней установкой, остаются.

Чтобы устранить эту проблему, выполните одно из следующих действий:

  • Не указывайте параметр /nostdlib из компилятора командной строки.

  • Для современных проектов в стиле SDK убедитесь, что проект предназначен для правильной среды выполнения .NET. В вашем .csproj файле убедитесь, что свойство <TargetFramework> указывает на предназначенную среду выполнения.

    <PropertyGroup>
      <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>
    

    Для проектов с несколькими целевыми объектами используйте <TargetFrameworks> (plural):

    <PropertyGroup>
      <TargetFrameworks>net8.0;net48</TargetFrameworks>
    </PropertyGroup>
    
  • Для устаревших форматов проектов убедитесь, что проект ссылается на правильный mscorlib.dll.

  • Переустановите среду CLR .NET Framework (если предыдущие решения не решают проблему).

  • Перезагрузите проект в Visual Studio.

  • Закройте Visual Studio, удалите obj папки из bin каталога проекта, а затем снова откройте Visual Studio и перестроите проект.