当前位置: 首页 > news >正文

Unity使用代码分析Roslyn Analyzers

一、创建项目(注意这里不要选netstandard2.1会有报错)

在这里插入图片描述

二、NuGet上安装Microsoft.CodeAnalysis.CSharp

在这里插入图片描述

三、实现[Partial]特性标注的类,结构体,record必须要partial关键字修饰

需要继承DiagnosticAnalyzer
注意一定要加特性DiagnosticAnalyzer

using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;namespace CodeAnalysic
{[DiagnosticAnalyzer(LanguageNames.CSharp)]public class PartialAnalyzer : DiagnosticAnalyzer{public override void Initialize(AnalysisContext context){context.EnableConcurrentExecution();context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);// 注册语义分析完成时要执行的回调context.RegisterSyntaxNodeAction(AnalyzeType, SyntaxKind.ClassDeclaration);context.RegisterSyntaxNodeAction(AnalyzeType, SyntaxKind.StructDeclaration);context.RegisterSyntaxNodeAction(AnalyzeType, SyntaxKind.RecordDeclaration);}public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);private static void AnalyzeType(SyntaxNodeAnalysisContext context){//类型声明 的语法树(Syntax Tree)节点的一个基础抽象类var decl = (TypeDeclarationSyntax)context.Node;// 检查是否有 [Partial] 特性bool hasAttr = decl.AttributeLists.SelectMany(a => a.Attributes).Any(attr =>attr.Name.ToString() == "Partial");if (!hasAttr)return;// 检查是否使用 partialbool isPartial = decl.Modifiers.Any(m => m.IsKind(SyntaxKind.PartialKeyword));if (!isPartial){var kind = decl switch{ClassDeclarationSyntax _ => "类",StructDeclarationSyntax _ => "结构体",_ => "record"};var diag = Diagnostic.Create(Rule,decl.Identifier.GetLocation(),kind,decl.Identifier.Text);context.ReportDiagnostic(diag);}}private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(id: "P0001",title: "类型标记了 [Partial],应声明为 partial",messageFormat: "{0} '{1}' 标记了 Partial 特性,但未声明为 partial",category: "Usage",defaultSeverity: DiagnosticSeverity.Error,isEnabledByDefault: true);}
}
public class PartialAttribute: Attribute{}

四、构建 (VS:生成)

在这里插入图片描述

五、将dll拖入Unity

在这里插入图片描述

在这里插入图片描述

六、拖入发现出现报错,需要将Platform勾选全部去掉

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、测试代码

在这里插入图片描述

八、这时发现没有检查效果。需要添加标签RoslynAnalyzer

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

九、如果这里你在开始创建时没有选择netstandard2.1,那么忽略

在这里插入图片描述
右键解决方案=>属性
在这里插入图片描述
重新导入并添加标签RoslynAnalyzer
在这里插入图片描述
在这里插入图片描述

10、最终控制台已经出现效果

在这里插入图片描述

官方文档

http://www.dtcms.com/a/237921.html

相关文章:

  • 【动画】Unity2D骨骼动画-Animation2D
  • Linux系统编程中的_GNU_SOURCE宏
  • 【Blender】Blender 基础:导入导出
  • Unity中如何播放视频
  • WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js
  • webrtc 在线测试, 如何在线拉流测试
  • 建造者模式深度解析与实战应用
  • Framework开发之IMS逻辑浅析1--关键线程及作用
  • 软件工程的软件生命周期通常分为以下主要阶段
  • [论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景
  • 基于 Transformer robert的情感分类任务实践总结之三——FGM
  • day 18进行聚类,进而推断出每个簇的实际含义
  • Boost ASIO 库深入学习(3)
  • Unity VR/MR开发-VR/开发SDK选型对比分析
  • 服务器 | Centos 9 系统中,如何部署SpringBoot后端项目?
  • debian12拒绝海外ip连接
  • DHCP / DHCPv6 原理 / 报文解析 / 配置示例
  • 对比传统引擎,Unity3D 在生产配套中的独特优势
  • 前端打包工具简单介绍
  • 前端知识导图
  • Spring Boot中Bean注入方式对比与最佳实践
  • webpack其余配置
  • 详解鸿蒙Next仓颉开发语言中的动画
  • RabbitMQ入门
  • 大数据+智能零售:数字化变革下的“智慧新零售”密码
  • 【Docker 02】Docker 安装
  • 【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示
  • Maven入门(够用)
  • windows10下搭建nfs服务器
  • Maven的使用