Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются следующие предупреждения компилятора:
- CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058: Компонент недоступен. Используйте более новую языковую версию.
- CS8058: функция экспериментальна.
- CS8192: указанная версия языка не поддерживается или недопустимая
- CS8303: указанная языковая версия не может иметь начальные нули
- CS8304: версия компилятора меньше языковой версии
- CS1738: спецификации именованных аргументов должны отображаться после указания всех фиксированных аргументов.
- CS8306: имя элемента кортежа определяется.
- CS8314: выражение типа не может обрабатываться шаблоном типа
- CS8371: атрибуты, предназначенные для полей в свойствах автозапуска, не поддерживаются в языковой версии.
-
CS8401: Для использования
@$вместо$@как буквальной интерполированной строки, используйте более новую версию языка. - CS8511: выражение типа не может обрабатываться шаблоном типа.
- CS8627: параметр типа, допускающего значение null, должен быть известен как тип значения или ссылочный тип, не допускающий значения NULL.
- CS8630: недопустимые параметры, допускающие значение NULL. Использование более новой языковой версии
- CS8652: модификатор недействителен для этого элемента.
- CS8704: Тип не реализует член интерфейса. Он не может неявно реализовать непубличный член.
- CS8706: тип не может реализовать член интерфейса, так как компонент недоступен в этой версии.
- CS8904: недопустимая дисперсия: параметр типа должен быть допустимым.
- CS8912: наследование записи с запечатанным объектом Object.ToString не поддерживается.
- CS8919: не удается реализовать указанный член интерфейса в типе, так как целевая среда выполнения не поддерживает статические абстрактные члены в интерфейсах
- CS8929: метод не может реализовать член интерфейса в типе, так как целевая среда выполнения не поддерживает статические абстрактные члены в интерфейсах.
- CS8957: условное выражение недопустимо в языковой версии, так как общий тип не найден между типами.
- CS8967: переносы строк внутри невербатимной интерполированной строки не поддерживаются в C#
- CS9041: требует функции компилятора, которая не поддерживается этой версией компилятора C#.
- CS9014: ошибка: использование возможно неназначенных свойств. Обновите свойство до автоматического использования по умолчанию.
- CS9015: ошибка: использование возможно неназначенных полей. Обновление до автоматического обновления поля.
- CS9016: предупреждение: использование, возможно, неназначенных свойств. Обновите свойство до автоматического использования по умолчанию.
- CS9017: предупреждение: использование, возможно, неназначенного поля. Обновите до автоматического назначения поля.
- CS9064: целевая среда выполнения не поддерживает поля ссылок.
- CS9103: определение в модуле с нераспознанной версией RefSafetyRulesAttribute, ожидающей "11".
- CS9171: целевая среда выполнения не поддерживает встроенные типы массивов.
-
CS9194: аргумент не может быть передан с ключевым словом
ref. Чтобы передатьrefаргументыinв параметры, обновите версию языка до 12 или более поздней. - CS9202: функция недоступна в C# 12.0. Используйте более новую языковую версию
- CS9211: аргумент diagnosticId атрибута "Экспериментальный" должен быть допустимым идентификатором.
- CS9240: целевая среда выполнения не поддерживает универсальные с передачей по ссылке.
- CS9260: функция недоступна в C# 13.0. Используйте более новую языковую версию*
- CS9268: тип предназначен только для оценки и подлежит изменению или удалению в будущих обновлениях. Отключайте эту диагностику, чтобы продолжить.
- CS9269: UnscopedRefAttribute действителен только в C# 11 или более поздней версии или при выборе net7.0 или более поздней версии.
-
CS9271: тип "
Microsoft.CodeAnalysis.EmbeddedAttribute" должен быть не универсальным, внутренним, запечатанным, нестатичным, иметь конструктор без параметров, наследовать от System.Attribute и иметь возможность применяться к любому типу. - CS9327: функция недоступна в C# 14.0. Используйте более новую языковую версию.
- CS9328: метод использует функцию, которая в настоящее время не поддерживается асинхронной средой выполнения.
Кроме того, следующие ошибки и предупреждения связаны с изменениями инициализации структуры в последних версиях:
- CS0171, CS8881: поле резервного копирования для автоматического реализации свойства "name" должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.
- CS0188, CS8885: объект 'this' нельзя использовать до тех пор, пока все его поля не будут назначены
- CS0843, CS8880: поле резервного копирования для автоматического реализации свойства "name" должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.
- CS8305: компонент предназначен только для оценки и подлежит изменению или удалению в будущих обновлениях.
- CS9204: тип предназначен только для оценки и подлежит изменению или удалению в будущих обновлениях. Отключайте эту диагностику, чтобы продолжить.
Причина всех этих ошибок и предупреждений заключается в том, что компилятор, установленный, поддерживает более новую версию C#, чем выбранная версия проекта. Компилятор C# может соответствовать любой предыдущей версии. Синтаксис можно проверить на более ранней версии C#или потому, что проект должен поддерживать старые библиотеки или среды выполнения.
Существует две возможные причины и три способа устранения этих ошибок и предупреждений.
Обновление целевой платформы
Компилятор определяет значение по умолчанию на основе следующих правил:
| Цель | Версия | Версия языка C# по умолчанию |
|---|---|---|
| .СЕТЬ | 11.x | C# 15 |
| .СЕТЬ | 10.x | C# 14 |
| .СЕТЬ | 9.x | C# 13 |
| .СЕТЬ | 8.x | C# 12 |
| .СЕТЬ | 7.x | C# 11 |
| .СЕТЬ | 6.х | C# 10 |
| .СЕТЬ | 5.x | C# 9.0 |
| .NET Core | 3.x | C# 8.0 |
| .NET Core | 2.x | C# 7.3 |
| .NET Standard | 2.1 | C# 8.0 |
| .NET Standard | 2.0 | C# 7.3 |
| .NET Standard | 1.x | C# 7.3 |
| Платформа .NET Framework | все | C# 7.3 |
Если выбранная платформа не соответствует требуемой языковой версии, можно обновить целевую платформу.
Выберите соответствующую версию языка
В файле проекта может быть выбрана более старая целевая платформа. При удалении LangVersion элемента из файла проекта компилятор использует значение по умолчанию, указанное в предыдущем разделе. В следующей таблице показаны все текущие версии языка C#. Вы также можете указать определенную языковую версию, чтобы включить новые функции.
| Значение | Значение |
|---|---|
preview |
Компилятор допускает использование любого допустимого синтаксиса языка из последней предварительной версии. |
latest |
Компилятор принимает синтаксис из последней выпущенной версии компилятора, включая минорную версию. |
latestMajorили default |
Компилятор принимает синтаксис из последней основной версии компилятора. |
15.0 |
Компилятор принимает только синтаксис, включенный в C# 15 или более поздней версии. |
14.0 |
Компилятор принимает только синтаксис, включенный в C# 14 или более поздней версии. |
13.0 |
Компилятор принимает только синтаксис, включенный в C# 13 или более поздней версии. |
12.0 |
Компилятор принимает только синтаксис, включенный в C# 12 или ниже. |
11.0 |
Компилятор принимает только синтаксис, включенный в C# 11 или ниже. |
10.0 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 10 или более ранних версий. |
9.0 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 9 или более ранних версий. |
8.0 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 8.0 или более ранней версии. |
7.3 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 7.3 или более ранней версии. |
7.2 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 7.2 или более ранней версии. |
7.1 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 7.1 или более ранней версии. |
7 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 7.0 или более ранней версии. |
6 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 6.0 или более ранней версии. |
5 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 5.0 или более ранней версии. |
4 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 4.0 или более ранней версии. |
3 |
Компилятор принимает только синтаксис, включенный в спецификацию C# 3.0 или более ранней версии. |
ISO-2или 2 |
Компилятор принимает только синтаксис, включенный в спецификацию ISO/IEC 23270:2006 C# (2.0). |
ISO-1или 1 |
Компилятор принимает только синтаксис, включенный в спецификацию ISO/IEC 23270:2003 C# (1.0/1.2). |
Дополнительные сведения о версиях языка, поддерживаемых для каждой версии платформы, см. в статье " Настройка языковой версии " в разделе справочника по языку.
Избегайте обновленной функции
Если необходимо поддерживать старые библиотеки или среды выполнения, может потребоваться избежать использования новых функций.
Включение экспериментальных функций
Диагностика для экспериментальных функций может быть отключена, чтобы использовать экспериментальные функции.
Предупреждение
Экспериментальные функции подвержены изменениям. API могут измениться или их могут удалить в будущих обновлениях. Включение экспериментальных функций — это способ получения отзывов авторов библиотек о идеях и концепциях для будущего развития. Используйте крайнюю осторожность при использовании любой функции, помеченной как экспериментальная.
Вы также можете объявить собственные экспериментальные функции с помощью System.Diagnostics.CodeAnalysis.ExperimentalAttribute. Компилятор выдает CS9211, если идентификатор, используемый для экспериментальной функции, не является допустимым идентификатором.
Необратимые изменения при инициализации структуры
Все эти ошибки и предупреждения помогают обеспечить правильную инициализацию struct типов перед доступом к их полям. В более ранних версиях C#необходимо явно назначить все поля в структуре в любом конструкторе. Конструктор без параметров инициализирует все поля в значение по умолчанию. В более поздних версиях все конструкторы инициализируют все поля. Либо поле явно задано, задано в инициализаторе полей или установлено значение по умолчанию.
- CS0171, CS8881: поле резервного копирования для автоматического реализации свойства "name" должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.
- CS0188, CS8885: объект 'this' нельзя использовать, пока не будут присвоены значения всем его полям
- CS0843, CS8880: поле резервного копирования для автоматического реализации свойства "name" должно быть полностью назначено перед возвратом элемента управления вызывающему объекту.
Эту ошибку можно устранить, обновив версию языка до C# 11, каждый struct конструктор инициализирует все поля. Если это не возможно, необходимо явно вызвать конструктор по умолчанию, как показано в следующем примере:
struct S
{
public int AIProp { get; set; }
public S(int i){} //CS0843
// Try the following lines instead.
// public S(int i) : this()
// {
// AIProp = i;
// }
}
class Test
{
static int Main()
{
return 1;
}
}
Атрибуты, специфичные для реализации
-
CS9271: тип "
Microsoft.CodeAnalysis.EmbeddedAttribute" должен быть не универсальным, внутренним, запечатанным, нестатичным, иметь конструктор без параметров, наследовать от System.Attribute и иметь возможность применяться к любому типу.
Компилятор создает источник для этого атрибута при необходимости для исходного кода. Этот тип не следует объявлять.