当前位置: 首页 > 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、最终控制台已经出现效果

在这里插入图片描述

官方文档

相关文章:

  • 【动画】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 在生产配套中的独特优势
  • 前端打包工具简单介绍
  • 前端知识导图
  • 中国建设银行网站公积金查询/神童预言新冠2023结束
  • 成都平台网站建设公司/百度客服在线咨询人工服务
  • 石家庄专业建站公司/国内新闻大事
  • 柳市做公司网站/平台推广渠道
  • 济南网站建设 选聚搜网络/建站平台
  • 网站开发公司会在最后面加上公司/河北seo技术培训