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.pswp.cn/bicheng/84338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

knife4j:4.3.0 default-flat-param-object: true 没有生效

Get 方式请求 前端接口文档中的键值对方式&#xff08;get&#xff09;发送对象参数&#xff0c;将对象请求参数展开

C++.OpenGL (15/64)Assimp(Open Asset Import Library)

Assimp(Open Asset Import Library) 3D模型加载核心流程 #mermaid-svg-cKmTZDxPpROr7ly1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cKmTZDxPpROr7ly1 .error-icon{fill:#552222;}#mermaid-svg-cKmTZDxPpROr…

课堂笔记:吴恩达的AI课(AI FOR EVERYONE)-第一周part2 人工智能术语人工智能公司应该怎么做

人工智能术语&人工智能公司应该怎么做 一、人工智能术语 1.机器学习&#xff1a; 让电脑能够不用开发软件&#xff0c;而自主获取某种能力的研究领域。 2.数据科学&#xff1a; 从数据中提取知识和见解的科学&#xff1b; 3.深度学习&#xff1a; 度学习是一种机器…

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…

鸿蒙开发——如何修改模拟器的显示图标/标题

1.图标 第一步&#xff1a;将你所需要的图标方到src/main/resources/base/media下 第二步&#xff1a;找到entry项目下面的src/main/module.json5 第三步&#xff1a;将原来的 "icon": "$media:layered_image", 切换成 "icon": "$media…

音乐“穿梭机”AudioRelay,让你的音频“无缝对接”

嘿&#xff0c;小伙伴们&#xff01;今天电脑天空给大家安利一款超神奇的音频小能手——AudioRelay&#xff01;要是你和我一样&#xff0c;经常在各种设备之间“折腾”音频&#xff0c;那这玩意儿绝对能让你眼前一亮。 你有没有遇到过这样的烦心事儿&#xff1f;电脑里正放着…

Chrome二级标签无法选中的解决方案

问题描述 近段时间&#xff0c;我的chrome软件选择标签时候&#xff0c;发现&#xff0c;二级文件夹下的标签都无法选中。并且右上角三个点里面书签的下辖子项目也根本无法选中。这就导致我连目录也无法导出来。后来发现ctrlshiftO才调出来书签界面&#xff0c;导出了chrome的…

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:

CppCon 2015 学习:The Importance of Being const

const 的意义与作用 “const 让你可以同时向编译器和其他程序员说明&#xff1a;这个值应该保持不变。只要这种情况成立&#xff0c;你就应该明确地使用 const&#xff0c;因为这样可以让编译器帮你确保这个约束不会被破坏。” 逐句解释&#xff1a; 使用 const&#xff0c;你…

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …

网格三面角,散射过程推导

电场矢量本身只有一个方向&#xff0c; 下面对其分解为v矢量方向和h矢量方向。分解成两个电场矢量方向 又再次分解为坐标矢量方向 本段是V极化说在平面在xz坐标平面上&#xff0c;h极化只有y分量&#xff0c;注意这分析方法 反射波矢量仍在XZ坐标面上&#xff0c;&#xff08…

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…

Linux共享内存原理及系统调用分析

shmget 是 System V 共享内存的核心系统调用之一&#xff0c;其权限位&#xff08;shmflg 参数&#xff09;决定了共享内存段的访问控制和创建行为。以下是权限位的详细解析&#xff1a; 权限位的组成 shmflg 参数由两部分组成&#xff1a; 权限标志&#xff08;低 9 位&…

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…

Vue3 + TypeScript + Element Plus 设置表单中日期控件的宽度

需要设置日期控件的宽度 要设置 el-date-picker 的宽度&#xff0c;可以通过以下方法实现&#xff08;推荐方法1或2&#xff09;&#xff1a; 方法1&#xff1a;使用内联样式&#xff08;最直接&#xff09; 直接在组件上添加 style"width: 100%"&#xff1a; htm…

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…

25.6.9学习总结

A. 误报&#xff08;False Alarm&#xff09; A. 误报&#xff08;False Alarm&#xff09;https://codeforces.com/contest/2117/problem/A 时间限制&#xff1a;1 秒 内存限制&#xff1a;256 兆字节 Yousef 站在一个长走廊的入口处&#xff0c;面前有 n 扇门 &#xff0c…

高并发内存池的轻量级模拟-细节处理与优化部分

一.当申请的内存大小大于256kb的处理方式 因为256kb对于我们当前的实现其实也就32页,我们的页缓存上限是128页.所以思路非常清晰明了:当申请内存大小大于32页同时小于等于128页时,我们按照一页的方式向上对齐后计算所需页数,然后向页缓存申请.而大于128页的请求我们直接向堆申请…

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…