Диагностика генератора источников в .NET 6+

Если проект .NET 6+ ссылается на пакет, который позволяет генерацию исходного кода, например, решение для ведения журнала, то анализаторы, относящиеся к генерации исходного кода, будут выполняться во время компиляции. В этой статье приводятся диагностические сведения компилятора, связанные со сгенерированным исходным кодом.

Если вы сталкиваетесь с одним из этих предупреждений или ошибок при сборке, следуйте конкретным указаниям, приведенным для идентификатора диагностики в разделе Справочник. Вы также можете отключить предупреждения с помощью определенного SYSLIB1XXX значения идентификатора диагностики. Дополнительные сведения см. в разделе Подавление предупреждений.

Предупреждения анализатора

Значения идентификатора диагностики, зарезервированные для предупреждений анализатора сгенерированного исходного кода, находятся в диапазоне от SYSLIB1001 до SYSLIB1999.

Справочные материалы

В следующей таблице представлен индекс диагностики SYSLIB1XXX в .NET 6 и более поздних версиях.

Идентификатор диагностики Описание
SYSLIB1001 Имена методов ведения журнала не могут начинаться с _
SYSLIB1002 Не включайте параметры уровня ведения журнала в шаблоны сообщений журнала.
SYSLIB1003 InvalidLoggingMethodParameterNameTitle
SYSLIB1004 Класс логирования не может находиться в вложенных типах.
SYSLIB1005 Не удалось найти требуемое определение типа
SYSLIB1006 Несколько методов ведения журнала не могут использовать один и тот же идентификатор события в классе
SYSLIB1007 Методы логирования должны возвращать void
SYSLIB1008 Один из аргументов метода ведения журнала должен реализовывать интерфейс Microsoft.Extensions.Logging.ILogger
SYSLIB1009 Методы ведения журнала должны иметь значение static
SYSLIB1010 Методы ведения журнала должны иметь значение partial
SYSLIB1011 Методы логирования не могут использовать allows ref struct ограничение
SYSLIB1012 Избыточный квалификатор в сообщении логирования
SYSLIB1013 Не используйте параметры исключения в виде шаблонов в сообщении журнала
SYSLIB1014 Шаблон ведения журнала не имеет соответствующего аргумента метода
SYSLIB1015 В сообщении журнала отсутствует ссылка на аргумент
SYSLIB1016 Методы ведения журнала не могут содержать тело
SYSLIB1017 Значение LogLevel должно быть указано в атрибуте LoggerMessage или указано в качестве параметра для метода ведения журнала
SYSLIB1018 Не включайте параметры логгера как шаблоны в сообщение лога
SYSLIB1019 Не удалось найти поле типа Microsoft.Extensions.Logging.ILogger
SYSLIB1020 Найдено несколько полей типа Microsoft.Extensions.Logging.ILogger
SYSLIB1021 Несколько имен элементов шаблона сообщения отличаются только регистром
SYSLIB1022 Нельзя использовать строки неправильного формата (например, с лишними фигурными скобками)
SYSLIB1023 Создание более шести аргументов не поддерживается
SYSLIB1024 Аргумент метода ведения журнала использует модификатор неподдерживаемых out параметров
SYSLIB1025 Несколько методов ведения журнала не могут использовать одно и то же имя события в классе
SYSLIB1026 Версия языка C# не поддерживается генератором источника ведения журнала.
SYSLIB1027 Основной параметр конструктора типа Microsoft.Extensions.Logging.ILogger скрыт полем
SYSLIB1028 Аргумент метода ведения журнала использует неподдерживаемый params или scoped модификатор параметров
SYSLIB1029 Параметр метода ведения журнала — это ref struct
SYSLIB1030 Генератор исходного кода System.Text.Json не создал метаданные сериализации для типа
SYSLIB1031 Генератор исходного кода System.Text.Json обнаружил дублирующееся имя свойства JsonTypeInfo
SYSLIB1032 Генератор исходного кода System.Text.Json обнаружил неразделяемый класс контекста
SYSLIB1033 Генератор исходного кода System.Text.Json обнаружил тип с несколькими аннотациями [JsonConstructor]
SYSLIB1034 JsonSourceGenerator обнаружил аннотацию JsonStringEnumConverter
SYSLIB1035 Генератор исходного кода System.Text.Json обнаружил тип с несколькими аннотациями [JsonExtensionData]
SYSLIB1036 Генератор исходного кода System.Text.Json обнаружил недопустимую заметку [JsonExtensionData]
SYSLIB1037 Генератор исходного кода System.Text.Json обнаружил тип со свойствами только для инициализации, для которых не поддерживается десериализация
SYSLIB1038 Генератор исходного кода System.Text.Json обнаружил свойство, аннотированное с помощью [JsonInclude], у которого есть недоступные аксессоры.
SYSLIB1039 JsonSourceGenerator обнаружил аннотацию с включенным JsonSourceGenerationMode.Serialization
SYSLIB1040 Недопустимое GeneratedRegexAttribute использование.
SYSLIB1041 К одному методу применено несколько GeneratedRegexAttribute атрибутов, но разрешено только одно.
SYSLIB1042 Указанное регулярное выражение недопустимо.
SYSLIB1043 GeneratedRegexAttribute Метод должен быть частичным, без параметром, не универсальным и не абстрактным, а также возвращатьRegex.
SYSLIB1044 Генератор регулярных выражений не мог создать полную исходную реализацию для указанного регулярного выражения из-за внутреннего ограничения. Дополнительные сведения см. в описании в созданном источнике.
SYSLIB1045 Используется GeneratedRegexAttribute для создания реализации регулярных выражений во время компиляции.
SYSLIB1046 (Зарезервировано для System.Text.RegularExpressions.Generator.)
SYSLIB1047 (Зарезервировано для System.Text.RegularExpressions.Generator.)
SYSLIB1048 (Зарезервировано для System.Text.RegularExpressions.Generator.)
SYSLIB1049 (Зарезервировано для System.Text.RegularExpressions.Generator.)
SYSLIB1050 Недопустимое LibraryImportAttribute использование.
SYSLIB1051 Указанный тип не поддерживается p/invokes, генерируемыми исходным кодом.
SYSLIB1052 Указанная конфигурация не поддерживается сгенерированными исходным кодом p/invokes.
SYSLIB1053 Указанные LibraryImportAttribute аргументы нельзя перенаправить в DllImportAttribute.
SYSLIB1054 Используйте LibraryImportAttribute вместо DllImportAttribute для генерации кода маршаллинга p/invoke во время компиляции.
SYSLIB1055 Недопустимое CustomMarshallerAttribute использование.
SYSLIB1056 Указанный родной тип недопустим.
SYSLIB1057 Тип маршаллера не имеет требуемой структуры.
SYSLIB1058 Недопустимое NativeMarshallingAttribute использование.
SYSLIB1059 Тип маршаллатора не поддерживает выделение конструктора.
SYSLIB1060 Указанный тип маршаллера недопустим.
SYSLIB1061 Тип маршаллера имеет несовместимые сигнатуры метода.
SYSLIB1062 Проект должен быть обновлен с <AllowUnsafeBlocks>true</AllowUnsafeBlocks> помощью.
SYSLIB1063 (Зарезервировано для Microsoft.Interop.LibraryImportGenerator.)
SYSLIB1064 (Зарезервировано для Microsoft.Interop.LibraryImportGenerator.)
SYSLIB1065 (Зарезервировано для Microsoft.Interop.LibraryImportGenerator.)
SYSLIB1066 (Зарезервировано для Microsoft.Interop.LibraryImportGenerator.)
SYSLIB1067 (Зарезервировано для Microsoft.Interop.LibraryImportGenerator.)
SYSLIB1068 (Зарезервировано для Microsoft.Interop.LibraryImportGenerator.)
SYSLIB1069 (Зарезервировано для Microsoft.Interop.LibraryImportGenerator.)
SYSLIB1070 Недопустимое JSImportAttribute использование.
SYSLIB1071 Недопустимое JSExportAttribute использование.
SYSLIB1072 Указанный тип не поддерживается взаимодействием JavaScript, создаваемым на основе исходного кода.
SYSLIB1073 Указанная конфигурация не поддерживается взаимодействием JavaScript с исходным кодом.
SYSLIB1074 JSImportAttribute требует небезопасного кода.
SYSLIB1075 JSImportAttribute требует небезопасного кода.
SYSLIB1076 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1077 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1078 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1079 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1080 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1081 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1082 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1083 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1084 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1085 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1086 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1087 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1088 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1089 (Зарезервировано для System.Runtime.InteropServices.JavaScript.JSImportGenerator.)
SYSLIB1090 Недопустимое GeneratedComInterfaceAttribute использование.
SYSLIB1091 Метод объявляется в другом частичном объявлении, отличном от атрибута GeneratedComInterface .
SYSLIB1092 Использование атрибутов LibraryImport или GeneratedComInterface не соответствует рекомендации.
SYSLIB1093 Не удалось выполнить анализ создания интерфейса COM.
SYSLIB1094 Базовому COM-интерфейсу не удалось сгенерировать исходный код. Код не будет создан для этого интерфейса.
SYSLIB1095 Недопустимое GeneratedComClassAttribute использование.
SYSLIB1096 Используйте GeneratedComInterfaceAttribute вместо ComImportAttribute для генерации кода маршаллинга COM во время компиляции.
SYSLIB1097 Этот тип реализует по крайней мере один тип с атрибутом GeneratedComInterfaceAttribute . Добавьте GeneratedComClassAttribute, чтобы разрешить передачу этого типа в COM и обеспечивать доступ к COM-интерфейсам для типов с GeneratedComInterfaceAttribute из объектов этого типа.
SYSLIB1098 .NET COM-хостинг с EnableComHosting поддерживает только встроенное COM-взаимодействие. Он не поддерживает взаимодействие COM с автоматически генерируемым источником GeneratedComInterfaceAttribute.
SYSLIB1099 API взаимодействия с COM на System.Runtime.InteropServices.Marshal не поддерживают автогенерируемые COM и вызовут ошибку во время выполнения.
SYSLIB1100 Генератор привязки конфигурации: тип не поддерживается.
SYSLIB1101 Генератор привязки конфигурации: свойство типа не поддерживается.
SYSLIB1102 Генератор привязки конфигурации: языковая версия проекта должна иметь по крайней мере C# 12.
SYSLIB1103 Генератор привязки конфигурации: типы значений являются недопустимыми входными данными для методов конфигурации Bind.
SYSLIB1104 Генератор привязки конфигурации: генератор не может определить тип целевой конфигурации.
SYSLIB1105 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1106 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)(Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1107 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1108 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1109 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1110 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1111 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1112 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1113 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1114 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1115 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1116 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1117 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1118 (Зарезервировано для Microsoft.Extensions.Configuration.Binder.SourceGeneration.)
SYSLIB1201 Невозможно использовать ValidateObjectMembersAttribute или ValidateEnumeratedItemsAttribute на полях и свойствах с открытыми универсальными типами.
SYSLIB1202 Тип элемента не имеет полей или свойств для проверки.
SYSLIB1203 Тип не имеет полей или свойств для проверки.
SYSLIB1204 Тип, аннотированный с OptionsValidatorAttribute, не реализует необходимый интерфейс.
SYSLIB1205 Тип уже включает реализацию метода Validate.
SYSLIB1206 Не удается проверить частные поля или свойства.
SYSLIB1207 Тип члена не перечисляется.
SYSLIB1208 Проверяющие элементы, используемые для транзитивной или перечисленной проверки, должны иметь конструктор без параметров.
SYSLIB1209 OptionsValidatorAttribute не может применяться к статическому классу.
SYSLIB1210 Тип проверяющего элемента NULL указан для атрибутов ValidateObjectMembersAttribute или ValidateEnumeratedItemsAttribute.
SYSLIB1211 Неподдерживаемые циклические ссылки в типах моделей.
SYSLIB1212 Элемент, возможно, не имеет транзитивной проверки.
SYSLIB1213 Элемент потенциально отсутствует перечисление проверки.
SYSLIB1214 Не удается проверить константы, статические поля или свойства.
SYSLIB1215 Атрибут проверки члена недоступен из типа валидатора.
SYSLIB1216 Версия языка C# не поддерживается генератором источников проверки параметров.
SYSLIB1217 Атрибут проверки применим только к свойствам строки типа, массива или ICollectionне может использоваться с другими типами.
SYSLIB1218 (Зарезервировано для Microsoft.Extensions.Options.SourceGeneration.)
SYSLIB1219 (Зарезервировано для Microsoft.Extensions.Options.SourceGeneration.)
SYSLIB1220 JsonSourceGenerator обнаружил [JsonConverterAttribute] с недопустимым аргументом типа.
SYSLIB1221 JsonSourceGenerator не поддерживает эту версию языка C#.
SYSLIB1222 Конструктор, аннотированный с помощью JsonConstructorAttribute, недоступен.
SYSLIB1223 Конструктор, аннотированный с помощью JsonConstructorAttribute, недоступен.
SYSLIB1224 Типы, аннотированные с помощью JsonSerializableAttribute, должны быть классами, производными от JsonSerializerContext.
SYSLIB1225 (Зарезервировано для System.Text.Json.SourceGeneration.)
SYSLIB1226 (Зарезервировано для System.Text.Json.SourceGeneration.)
SYSLIB1227 (Зарезервировано для System.Text.Json.SourceGeneration.)
SYSLIB1228 (Зарезервировано для System.Text.Json.SourceGeneration.)
SYSLIB1229 (Зарезервировано для System.Text.Json.SourceGeneration.)
SYSLIB1230 Производный от интерфейса-атрибута, определенного GeneratedComInterfaceв другой сборке, не поддерживается.

Отключение предупреждений

Рекомендуется по возможности использовать одно из обходных решений. Однако если вы не можете изменить код, вы можете отключить предупреждение с помощью #pragma директивы или <NoWarn> параметра проекта. SYSLIB1XXX Если диагностика исходного генератора не отображается как ошибка, можно отключить предупреждение в коде или в файле проекта.

Чтобы отключить предупреждения в коде (при необходимости замените идентификатор диагностики):

// Disable the warning.
#pragma warning disable SYSLIB1006

// Code that generates compiler diagnostic.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB1006

Чтобы отключить предупреждения в файле проекта (при необходимости замените идентификаторы диагностики):

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   <TargetFramework>net10.0</TargetFramework>
   <!-- NoWarn below suppresses SYSLIB1002 project-wide -->
   <NoWarn>$(NoWarn);SYSLIB1002</NoWarn>
   <!-- To suppress multiple warnings, you can use multiple NoWarn elements -->
   <NoWarn>$(NoWarn);SYSLIB1002</NoWarn>
   <NoWarn>$(NoWarn);SYSLIB1006</NoWarn>
   <!-- Alternatively, you can suppress multiple warnings by using a semicolon-delimited list -->
   <NoWarn>$(NoWarn);SYSLIB1002;SYSLIB1006;SYSLIB1007</NoWarn>
  </PropertyGroup>
</Project>