.NET 6+ 中的源生成器诊断

2022-01-06 16:52:48 浏览数 (1)

如果你的 .NET 6 项目引用一个启用源生成代码的包(例如日志记录解决方案),则特定于源生成的分析器将在编译时运行。 本文列出了与源生成代码相关的编译器诊断。

如果你遇到其中一个生成警告或错误,请按照为参考部分列出的诊断 ID 提供的具体指导进行操作。 还可以使用特定的 SYSLIB1XXX 诊断 ID 值来取消警告。 有关详细信息,请参阅取消警告。

分析器警告

为源生成代码分析器警告保留的诊断 ID 值为 SYSLIB1001 至 SYSLIB1999。

参考

下表提供了 .NET 6 及更高版本中 SYSLIB1XXX 诊断的索引。

诊断 ID

说明

SYSLIB1001

日志记录方法名称不能以 _ 开头

SYSLIB1002

不要将日志级别参数作为模板包含在日志记录消息中

SYSLIB1003

InvalidLoggingMethodParameterNameTitle

SYSLIB1005

找不到所需的类型定义

SYSLIB1006

多个日志记录方法不能在类中使用相同的事件 ID

SYSLIB1007

日志记录方法必须返回 void

SYSLIB1008

日志记录方法的参数之一必须实现 Microsoft.Extensions.Logging.ILogger 接口

SYSLIB1009

日志记录方法必须为 static

SYSLIB1010

日志记录方法必须为 partial

SYSLIB1011

日志记录方法不能是泛型

SYSLIB1012

日志记录消息中的多余限定符

SYSLIB1013

不要将异常参数作为模板包含在日志记录消息中

SYSLIB1014

日志记录模板无相应的方法参数

SYSLIB1015

未从日志记录消息中引用参数

SYSLIB1016

日志记录方法不能有主体

SYSLIB1017

必须在 LoggerMessage 属性中提供 LogLevel 值或将其用作日志记录方法的参数

SYSLIB1018

不要将记录器参数作为模板包含在日志记录消息中

SYSLIB1019

找不到 Microsoft.Extensions.Logging.ILogger 类型的字段

SYSLIB1020

找到 Microsoft.Extensions.Logging.ILogger 类型的多个字段

SYSLIB1021

多个消息模板项名称只是大小写不同

SYSLIB1022

不能使用格式错误的格式字符串(例如不成对的大括号)

SYSLIB1023

不支持生成六个以上的参数

SYSLIB1030

System.Text.Json 源生成器未生成类型的序列化元数据

SYSLIB1031

System.Text.Json 源生成器遇到重复的 JsonTypeInfo 属性名称

SYSLIB1032

System.Text.Json 源生成器遇到非分部的上下文类

SYSLIB1033

System.Text.Json 源生成器遇到具有多个 [JsonConstructor] 注释的类型

SYSLIB1035

System.Text.Json 源生成器遇到具有多个 [JsonExtensionData] 注释的类型

SYSLIB1036

System.Text.Json 源生成器遇到无效的 [JsonExtensionData] 注释

SYSLIB1037

System.Text.Json 源生成器遇到具有仅初始化属性的类型,这些属性不支持反序列化

SYSLIB1038

System.Text.Json 源生成器遇到使用 [JsonInclude] 注释的属性,该属性具有不可访问的访问器

禁止显示警告

建议尽量使用解决方法之一。 但是,如果无法更改代码,可以通过 #pragma 指令或 <NoWarn> 项目设置来禁止显示警告。 如果 SYSLIB1XXX 源生成器诊断未显示为错误,则可以在代码或项目文件中禁止警告。

若要禁止显示代码中的警告,请执行以下操作:

代码语言:javascript复制
// Disable the warning.
#pragma warning disable SYSLIB1006
// Code that generates compiler diagnostic.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB1006

若要禁止显示项目文件中的警告,请执行以下操作:

代码语言:javascript复制
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   <TargetFramework>net6.0</TargetFramework>
   <!-- NoWarn below suppresses SYSLIB1002 project-wide -->
   <NoWarn> 

0 人点赞