Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются следующие ошибки компилятора:
- CS0101: ошибка: пространство имен "namespace" уже содержит определение для "identifier".
- CS0104: ошибка: "reference" является неоднозначной ссылкой между "identifier" и "identifier".
- CS0116: ошибка: пространство имен не может напрямую содержать элементы, такие как поля, методы или инструкции.
- CS0138: ошибка: директива using для пространства имен может применяться только к пространствам имен; "type" — это тип, а не пространство имен.
- CS0430: Ошибка: псевдоним extern "alias" не указан в параметре /reference.
-
CS0431: ошибка: не удается использовать псевдоним "identifier",
::так как псевдоним ссылается на тип. Используйте.вместо этого. - CS0432: Ошибка: псевдоним "идентификатор" не найден.
- CS0434: ошибка: пространство имен NamespaceName1 в NamespaceName2 конфликтует с типом TypeName1 в NamespaceName3.
- CS0438: ошибка: тип "type" в "module_1" конфликтует с пространством имен "namespace" в "module_2".
- CS0439: ошибка: объявление extern alias должно предшествовать всем остальным элементам, определенным в пространстве имен.
- CS0518: ошибка: предопределенный тип "type" не определен или импортирован.
- CS0576: ошибка: пространство имен "пространство имен" содержит определение, конфликтующее с псевдонимом "идентификатор".
-
CS0687: ошибка: квалификатор
::пространства имен всегда разрешается в тип или пространство имен, поэтому здесь запрещено. Вместо этого рекомендуется использовать.. - CS1022: Ошибка: ожидается определение типа, пространства имен или конец файла.
- CS1527: ошибка: элементы, определенные в пространстве имен, не могут быть явно объявлены как private, protected, protected internal или private protected
- CS1529: ошибка: предложение using должно предшествовать всем другим элементам, определенным в пространстве имен, кроме объявлений псевдонима extern.
- CS1537: ошибка: псевдоним using 'alias' уже был объявлен в этом пространстве имен.
- CS1671: ошибка: объявление пространства имен не может иметь модификаторы или атрибуты.
- CS1679: ошибка: недопустимый псевдоним экстерна для '/reference'; "идентификатор" не является допустимым идентификатором.
- CS1680: ошибка: недопустимый параметр псевдонима ссылки: "alias=" - отсутствует имя файла.
- CS1681: ошибка: невозможно переопределить глобальный внешний псевдоним extern.
- CS1730: ошибка: атрибуты сборки и модуля должны предшествовать всем остальным элементам, определенным в файле, за исключением директив using и объявлений extern alias.
- CS2034: ошибка: параметр /reference, объявляющий экстерн-псевдоним, может иметь только одно имя файла. Чтобы указать несколько псевдонимов или имен файлов, используйте несколько параметров /reference.
- CS7000: ошибка: неожиданное использование псевдонима.
-
CS7007: ошибка: директива
using staticможет применяться только к типам. Вместо этого рассмотрите директивуusing namespace. - CS7015: ошибка: "экстерн-псевдоним" недопустим в этом контексте.
- CS7016: ошибка: псевдоним 'alias' конфликтует с определением вида символа
- CS7021: ошибка: не удается объявить пространство имен в коде скрипта.
- CS8083: ошибка: имя, уточнённое псевдонимом, не является выражением.
- CS8085: ошибка: директива using static не может использоваться для объявления псевдонима.
- CS8914: Ошибка: глобальная директива using не может использоваться в объявлении пространства имен.
- CS8915: ошибка: глобальная директива using должна предшествовать всем неглобальным директивам using.
- CS8954: ошибка: исходный файл может содержать только одно объявление пространства имен с областью действия файла.
- CS8955: ошибка: исходный файл не может содержать как объявления пространства имен с областью файла, так и обычные объявления пространства имен.
- CS8956: ошибка: пространство имен с областью действия файла должно предшествовать всем остальным элементам в файле.
-
CS9130: ошибка: псевдоним using не может быть типом
ref. -
CS9131: ошибка: только псевдоним using может быть
unsafe. - CS9132: ошибка: использование псевдонима не может быть ссылочным типом, допускающим значение NULL.
-
CS9133: ошибка:
staticмодификатор должен предшествоватьunsafeмодификатору. - CS9162: тип недопустим для "using static". Можно использовать только класс, структуру, интерфейс, перечисление, делегат или пространство имен.
- CS9348: единица компиляции не может напрямую содержать элементы, такие как поля, методы или свойства.
И следующие предупреждения компилятора:
- CS0105: Предупреждение: директива using для пространства имен появилась ранее в этом пространстве имен.
- CS0435: предупреждение: пространство имен "namespace" в "assembly" конфликтует с импортированным типом "type" в "assembly". Используется пространство имен, определенное в "assembly".
- CS0436: предупреждение: тип "type" в "assembly" конфликтует с импортированным типом "type2" в "assembly". Используется тип, определенный в "assembly".
- CS0437: Предупреждение: тип "type" в assembly2 конфликтует с импортированным пространством имен "namespace" в "assembly1". Использование типа, определенного в "assembly".
-
CS0440: Предупреждение. Определение псевдонима с именем
globalне рекомендуется, так какglobal::всегда ссылается на глобальное пространство имен, а не псевдоним. - CS8019: сведения: ненужная директива using.
- CS8020: Информация: неиспользуемый внешний псевдоним.
- CS8933: Информация: директива using ранее уже была объявлена как global using.
Эти ошибки и предупреждения указывают на проблемы с директивами using, объявлениями в единицах компиляции и пространствах имён или на конфликты имён между типами и пространствами имён. В следующих разделах описаны эти ошибки и способы их исправления.
Директива Using
Следующие ошибки относятся к using директивам:
- CS0105: директива using для 'namespace' появилась ранее в этом пространстве имен.
- CS0430: Внешний псевдоним 'alias' не указан в параметре /reference.
- CS0439: Объявление псевдонима extern должно предшествовать всем остальным элементам, определенным в пространстве имен.
- CS1529: директива using должна предшествовать всем остальным элементам, определенным в пространстве имен, кроме объявлений псевдонимов extern.
- CS1679: недопустимый псевдоним экстерна для '/reference'; "идентификатор" не является допустимым идентификатором.
- CS1680: недопустимый параметр псевдонима ссылки: "alias=" - отсутствует имя файла.
- CS1681: нельзя переопределить глобальный псевдоним экстерна.
- CS1730: атрибуты сборки и модуля должны предшествовать всем другим элементам, определенным в файле, за исключением директив using и объявлений псевдонимов extern.
- CS2034: параметр /reference, объявляющий экстерн-псевдоним, может иметь только одно имя файла. Чтобы указать несколько псевдонимов или имен файлов, используйте несколько параметров /reference.
- CS7015: 'extern alias' недопустим в этом контексте.
- CS8019: Ненужная директива using.
- CS8020: Неиспользуемый псевдоним extern.
- CS8933: директива using появилась ранее как глобальная директива using.
Ознакомьтесь с директивой using и ссылкой на язык псевдонима экстерна для правил, которые управляют этими диагностиками. Возможные исправления включают:
- Переместите все
usingдирективы в верхнюю часть файла или в начало объявления пространства имен. Язык C# требует, чтобы директивыusingрасполагались перед другими элементами в пространстве имен (CS1529). - Переместите все
extern aliasобъявления перед любымиusingдирективами. Этому языку требуются екстерн алиасы прежде всех других элементов, включаяusingдирективы (CS0439, CS7015). - Переместите все атрибуты сборки и уровня модуля после клаузов
usingи объявленийextern alias, но перед объявлениями типов. Атрибуты должны соответствовать директивам, но предшествовать типам (CS1730). - Убедитесь, что каждое
extern aliasобъявление в исходном коде имеет соответствующий псевдоним, определенный в опциях ссылок проекта. Компилятор не может разрешить псевдоним, который не был указан (CS0430). - Используйте отдельный
/referenceпараметр для каждого экстерн-псевдонима, а не объединение нескольких псевдонимов в одном варианте. Компилятору требуется один псевдоним для каждого параметра ссылки (CS2034). - Убедитесь, что псевдоним в параметре
/referenceявляется допустимым идентификатором C#. Псевдоним должен соответствовать правилам именования идентификаторов (CS1679). Добавьте имя файла после знака=в опции ссылки на псевдоним. Компилятору необходимо знать, какая сборка ссылается на псевдоним (CS1680). - Не пытайтесь переопределить
globalэкстерн-псевдоним.global— это предопределенный псевдоним, который ссылается на все ссылки без псевдонимов (CS1681). - Удалите повторяющиеся
usingдирективы. Компилятор предупреждает, когда одно пространство имен импортируется несколько раз (CS0105, CS8019, CS8933). - Удалите неиспользуемые
extern aliasобъявления. Компилятор выдает диагностику, когда экстерн-псевдоним объявлен, но никогда не используется в коде (CS8020).
Использование статической директивы
Следующие ошибки относятся к using static директивам:
- CS0138: директива using для пространства имен может применяться только к пространствам имен; "type" — это тип, а не пространство имен.
-
CS7007: директива
using staticможет применяться только к типам. Вместо этого рассмотрим директивуusing namespace. -
CS9133:
staticмодификатор должен предшествоватьunsafeмодификатору. - CS9162: тип недопустим для "using static". Можно использовать только класс, структуру, интерфейс, перечисление, делегат или пространство имен.
См. справочник по языку статической директивы для правил, которые управляют этими диагностиками. Возможные исправления включают:
- Добавьте модификатор
staticпри импорте элементов типа напрямую, так как опущениеstaticуказывает компилятору, что вы импортируете пространство имен, а не тип (CS0138). -
staticУдалите модификатор при импорте пространства имен, так какusing staticего можно применять только к типам, а не к пространствам имен (CS7007). Убедитесь, что цельusing staticдирективы — это класс, структура, интерфейс, перечисление или делегат, так как другие типы не являются допустимыми целевыми объектами для статических импортов (CS9162). -
staticПоместите модификатор передunsafeмодификатором при объединении обоих, так как язык требует модификаторов в определенном порядке (CS9133).
Глобальная директива using
Следующие ошибки относятся к global using директивам:
- CS8914: глобальная директива using не может использоваться в объявлении пространства имен.
- CS8915: директива глобального использования должна предшествовать всем директивам, отличным от глобального использования.
Ознакомьтесь с языковым справочником по директивам глобального использования для получения информации о правилах, которые управляют этими диагностическими процессами. Возможные исправления включают:
- Переместите директивы
global usingвне любого объявления пространства имен в область видимости файла, так как глобальные директивы использования применяются ко всему проекту и не могут быть ограничены пространством имен (CS8914). - Поместите все
global usingдирективы перед любыми не глобальнымиusingдирективами в файле, так как языку требуются глобальные директивы, которые предшествуют локальным директивам (CS8915). - Директива
static global usingне может ссылаться на локальный тип файла .
Пространство имен, ограниченное областью файла
Следующие ошибки связаны с пространствами имен с областью действия файла:
- CS8954: исходный файл может содержать только одно объявление пространства имен с областью действия файла.
- CS8955: исходный файл не может содержать как объявления пространства имен с областью файла, так и обычные объявления пространства имен.
- CS8956: пространство имен с областью действия файла должно предшествовать всем остальным элементам в файле.
См. справочник по языку пространства имен с областью действия файла для правил, которые управляют этими диагностиками. Возможные исправления включают:
- Используйте только одно пространство имен с областью действия файла в каждом файле, поскольку язык позволяет установить пространство имен для всех типов в файле (CS8954).
- Выберите объявления пространства имен с областью действия файла или с областью видимости блока в одном файле, так как язык не позволяет смешивать оба стиля (CS8955).
- Переместите объявление пространства имен, ограниченного файлом, перед объявлениями типов, так как пространство имен должно быть определено до объявлений типов (CS8956).
Квалификатор псевдонима
Следующие ошибки связаны с квалификатором псевдонима:
-
CS0431: Не удается использовать псевдоним "идентификатор" с
::, так как псевдоним ссылается на тип. Используйте.вместо этого. - CS0432: псевдоним "идентификатор" не найден.
-
CS0440: Не рекомендуется определять псевдоним с именем
global, так какglobal::всегда ссылается на глобальное пространство имен, а не на псевдоним. -
CS0687: Квалификатор
::пространства имен всегда разрешается в тип или пространство имен, поэтому этот квалификатор здесь недопустим. Вместо этого рекомендуется использовать.. - CS7000: Неожиданное использование имени с псевдонимом.
- CS8083: Имя, уточненное псевдонимом, не является выражением.
Ознакомьтесь со справочником по квалификатору пространства имен, чтобы узнать правила, управляющие этими диагностическими средствами. Возможные исправления включают:
- Замените оператор оператором
::.при доступе к членам псевдонима типа, так как::квалификатор действителен только для псевдонимов пространства имен, а не псевдонимов типов (CS0431, CS0687). - Убедитесь, что псевдоним, на который вы ссылаетесь, объявлен с помощью директивы
usingилиextern alias, так как компилятор не может разрешить неопределенный псевдоним (CS0432). - Используйте квалификатор псевдонима только в контекстах, где ожидается имя типа или пространства имен, так как имена псевдонимов недопустимы в качестве выражений (CS7000, CS8083).
- Выберите другое имя псевдонима вместо
globalэтого, так какglobalзарезервировано для ссылки на глобальное пространство имен и не может быть переопределено (CS0440).
Использование ограничений псевдонима
Следующие ошибки связаны с ограничениями на использование псевдонимов:
- CS0576: пространство имен "namespace" содержит определение, конфликтующее с псевдонимом "identifier".
- CS1537: Псевдоним using "alias" ранее уже встречался в этом пространстве имен.
- CS7016: Псевдоним "alias" конфликтует с определением вида символа
- CS8085: директива using static не может использоваться для объявления псевдонима.
-
CS9130: Псевдоним using не может быть типом
ref. -
CS9131: Только псевдоним using может быть
unsafe. - CS9132: использование псевдонима не может быть nullable ссылочным типом.
Ознакомьтесь со справочником по языку использование псевдонима для правил, которые регулируют эти диагностики. Возможные исправления включают:
- Выберите уникальное имя псевдонима, которое не конфликтует с существующими именами типов или пространств имен в данной области видимости, так как компилятор не может различать псевдоним и существующее определение (CS0576).
- Используйте каждое имя псевдонима только один раз в пространстве имен, так как повторяющиеся объявления псевдонимов создают неоднозначность (CS1537).
- В скрипте или коде отправки переименуйте псевдоним или конфликтующий член отправки, чтобы их имена были уникальными (CS7016). Диагностика определяет тип элемента, например
fieldилиtype. -
staticУдалите модификатор при объявлении псевдонима, так как псевдонимы и статические импорты являются взаимоисключающими — используются либоusing staticдля импорта элементов,using Alias =либо для создания псевдонима, но не одновременно (CS8085).
Следующие ограничения применяются к использованию псевдонимов:
- Не используйте модификаторы
ref,inилиoutв псевдониме, так как эти модификаторы параметров недопустимы в контекстах использования псевдонима типа (CS9130). - Используйте модификатор
unsafeтолько с псевдонимами, которые ссылаются на типы указателей, или с директивамиusing static, так какunsafeбез псевдонима или статического импорта не допускается (CS9131). - Используйте ненулевой ссылочный тип при создании псевдонима для ссылочного типа, так как типы ссылок, допускающие значение NULL, не могут быть псевдонимами напрямую (CS9132).
Объявления единицы компиляции и пространства имен
Следующие ошибки связаны с объявлениями в единицах компиляции и пространствах имен:
- CS0116: пространство имен не может непосредственно содержать элементы, такие как поля, методы или инструкции.
- CS1022: Ожидается определение типа или пространства имен либо конец файла.
- CS1527: Элементы, определенные в пространстве имен, не могут быть явно объявлены с модификаторами доступа private, protected, protected internal или private protected.
- CS1671: объявление пространства имен не может иметь модификаторы или атрибуты.
- CS7021: не удается объявить пространство имен в коде скрипта.
- CS9348: единица компиляции не может напрямую содержать элементы, такие как поля, методы или свойства.
Ознакомьтесь с ключевым словом пространства имен и общей структурой языка программы C# , чтобы узнать о правилах, которые управляют этими диагностиками. Возможные исправления включают:
- Убедитесь, что все методы, поля и свойства объявляются внутри типа (класс, структура, запись или интерфейс), а не непосредственно внутри пространства имен, так как пространства имен могут содержать только объявления типов, вложенные пространства имен и
usingдирективы (CS0116). - Перемещение полей, свойств, событий, индексаторов, операторов и методов-членов в класс, структуру, запись или интерфейс (CS9348). На уровне единицы компиляции исполняемый код может представлять собой инструкцию верхнего уровня в глобальном пространстве имён, а объявление в форме метода — локальную функцию, а не метод-член.
- Проверьте несоответствие фигурных скобок в исходном файле, так как дополнительная закрывающая скобка после определения пространства имен или типа приводит к ошибке, когда компилятор обнаруживает неожиданное содержимое в конце файла (CS1022).
- Измените уровень доступа типа, объявленного в пространстве имён, на
publicилиinternal, либо не указывайте модификатор доступа, чтобы использовать уровень доступа по умолчаниюinternal(CS1527). Типы, объявленные без явного пространства имен, являются членами глобального пространства имен, поэтому то же ограничение применяется. - Удалите любые модификаторы доступа или атрибуты из объявлений пространства имен, так как пространства имен не поддерживают модификаторы, такие как
publicилиprivate, а атрибуты не могут применяться к ним (CS1671). - Переместите объявления пространств имен из файлов скриптов C# (
.csx) в обычные исходные файлы (.cs), поскольку код скрипта выполняется в едином контексте выполнения, который не поддерживает объявления пространств имен (CS7021).
Конфликты именования пространства имен и типов
Следующие ошибки и предупреждения связаны с конфликтами именования между пространствами имен и типами:
- CS0101: пространство имен 'namespace' уже содержит определение для 'identifier'
- CS0104: 'reference' является неоднозначной ссылкой на имя между 'identifier' и 'identifier'.
- CS0434: пространство имен NamespaceName1 в NamespaceName2 конфликтует с типом TypeName1 в NamespaceName3.
- CS0435: пространство имен "пространство имен" в "сборке" конфликтует с импортированным типом "тип" в "сборке". Используется пространство имен, определенное в "сборке".
- CS0436: Тип "type" в "assembly" конфликтует с импортированным типом "type2" в "assembly". Используется тип, определенный в "assembly".
- CS0437: тип "type" в assembly2 конфликтует с импортированным пространством имен "namespace" в "assembly1". Используется тип, определенный в "assembly".
- CS0438: тип "type" в "module_1" конфликтует с пространством имен "namespace" в "module_2".
Ознакомьтесь с директивой using, внешним псевдонимом и квалификатором псевдонима пространства имен для правил, которые управляют этими диагностиками. Возможные исправления включают:
- Используйте полное имя или псевдоним пространства имен , если код ссылается на имя, которое существует в нескольких импортированных пространствах имен.
- Компилятор не может определить, какой тип вы планируете использовать, если одно и то же имя отображается в двух или нескольких пространствах имен, импортированных
usingдирективами (CS0104). - Переименуйте или удалите повторяющийся член пространства имен (CS0101). Пространство имен и тип также не могут иметь одинаковое полное имя, поэтому переименуйте объявление, если имя типа конфликтует с вложенным именем пространства имен.
- Переименуйте тип или пространство имен, если импортированный тип и импортированное вложенное пространство имен имеют одинаковое полное имя. Компилятор не может различать их при ссылке на имя (CS0434, CS0438).
Чтобы устранить предупреждения о конфликте именования, переименуйте одно из конфликтующих объявлений, используйте другое пространство имен, удалите ненужную ссылку на сборку или используйте экстерн-псевдоним для диамбигуации между двумя определениями. Компилятор автоматически разрешает эти конфликты — используя локально определенное пространство имен по импортированному типу (CS0435), локально определенному типу импортированного типа (CS0436) или локально определенному типу по импортированному пространству имен (CS0437), но предупреждения указывают на потенциальный источник путаницы, который следует устранить.
Импорт предопределенного типа
Следующая ошибка связана с отсутствующими предопределенными определениями типов:
- CS0518: предопределенный тип "type" не определен или импортирован.
Замечание
Это предупреждение сообщается только во время явных операций сборки или перестроения . Он не отображается во время ввода в интегрированной среде разработки в рамках диагностики IntelliSense. Это означает, что если вы исправите предупреждение с помощью поля или удалите его, предупреждение может сохраняться в списке ошибок, пока не создадите или перестроите проект еще раз.
См. справочник по параметрам компилятора NoStandardLib для правил, которые управляют этой диагностикой.
Убедитесь, что проект предназначен для правильной среды выполнения .NET. Стандартные типы, такие как System.Int32 и System.String, происходят из библиотеки среды выполнения. Неправильная или недостающая <TargetFramework> спецификация не позволяет компилятору находить эти типы (CS0518). Убедитесь, что свойство <TargetFramework> в файле .csproj указывает предназначенную среду выполнения (например, net10.0). Не указывайте параметр компилятора NoStandardLib , если вы не планируете определять собственное System пространство имен. Этот параметр предотвращает импорт стандартной библиотеки, которая определяет все предопределенные типы (CS0518). Если ошибка сохраняется, попробуйте перезагрузить проект в Visual Studio, удалить obj папки и bin перестроить проект или переустановить среду выполнения .NET (CS0518).