title author date CreateTime categories
Roslyn 静态分析
lindexi
2018-08-29 09:10:19 +0800
2018-03-13 14:28:34 +0800
Roslyn MSBuild 编译器

本文告诉大家如何使用 Roslyn 分析代码。

首先创建一个项目,项目使用.net Framework 4.6.2 ,控制台项目。然后需要安装一些需要的库

Nuget 安装

打开 Nuget 安装下面两个库

  • Microsoft.CodeAnalysis.CSharp

  • Microsoft.CodeAnalysis.CSharp.Workspaces

  • Newtonsoft.Json

使用

下面来写简单的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace TrrluujHlcdyqa
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("hellow");
}
} class Foo
{
public string KiqHns { get; set; }
}
}

对上面的代码分析

首先需要把上面的代码放在字符串

然后创建分析代码,读取代码。

   class ModelCollector : CSharpSyntaxWalker
{
public readonly Dictionary<string, List<string>> Models = new Dictionary<string, List<string>>();
public override void VisitPropertyDeclaration(PropertyDeclarationSyntax node)
{
var classnode = node.Parent as ClassDeclarationSyntax;
if (classnode != null && !Models.ContainsKey(classnode.Identifier.ValueText))
{
Models.Add(classnode.Identifier.ValueText, new List<string>());
} Models[classnode.Identifier.ValueText].Add(node.Identifier.ValueText);
}
}
   class Program
{
static void Main(string[] args)
{
string str = @"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace TrrluujHlcdyqa
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(""hellow"");
}
} class Foo
{
public string KiqHns { get; set; }
}
}"; var tree = CSharpSyntaxTree.ParseText(str); var root = (CompilationUnitSyntax)tree.GetRoot();
var modelCollector = new ModelCollector();
modelCollector.Visit(root);
Console.WriteLine(JsonConvert.SerializeObject(modelCollector.Models)); }
}

这时输出{"Foo":["KiqHns"]}

上面的代码从 https://stackoverflow.com/a/22881532/6116637 学的

更多关于 Roslyn 请看 手把手教你写 Roslyn 修改编译

参见:

通过Roslyn构建自己的C#脚本(更新版) - 天方 - 博客园

专栏:Roslyn 入门 - CSDN博客

Getting Started with Roslyn Analyzers

代码分析 - 借助与 NuGet 集成的 Roslyn 代码分析来生成和部署库

roslyn-analyzers/ReadMe.md at master · dotnet/roslyn-analyzers

In-memory C# compilation and .dll generation using Roslyn

2018-8-29-Roslyn-静态分析的更多相关文章

  1. Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够分析我们的项目文件. 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 R ...

  2. 记2018/4/29 qbxt 测试

    记 2018/4/29  qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...

  3. spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日

    最基本的ssm框架整合 本案例采用2018商业版intellij  idea  编辑器    maven项目管理工具  tomcat8.5 接着上一篇使用springmvc最基本配置开始 https: ...

  4. 【2018.07.29】(深度优先搜索/回溯)学习DFS算法小记

    参考网站:https://blog.csdn.net/ldx19980108/article/details/76324307 这个网站里有动态图给我们体现BFS和DFS的区别:https://www ...

  5. Roslyn 静态分析

    本文告诉大家如何使用 Roslyn 分析代码 首先创建一个项目,项目使用.net Framework 4.6.2 ,控制台项目.然后需要安装一些需要的库 Nuget 安装 打开 Nuget 安装下面两 ...

  6. 2018.3.29 div内容格式设置

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  7. 2018.3.29 div格式设置

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  8. 2018.3.29 DIV位置调整代码

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  9. 2018.09.29 Lua

    转自:https://zybuluo.com/lisaisacat/note/636399  谢谢 Lua 基础简明教程 脚本开发   目录 Lua 基础简明教程 目录 注释 Lua 编程 语句块 赋 ...

  10. 2018.12.29 codeforces 940E. Cashback(线性dp)

    传送门 题意:给出一个nnn个数的序列,要求将序列分成若干段,对于一段长度为kkk的自动删去最小的⌊kc⌋\left \lfloor \frac{k}{c} \right \rfloor⌊ck​⌋个数 ...

随机推荐

  1. BUUCTF 梅花香自苦寒来

    梅花香自苦寒来 打开图片可以看到,在jpg后面有大量的数据,将它保存出来,可以看出是十六进制,将它转为ascii,写脚本 with open('hex.txt','r') as h: h=h.read ...

  2. windows10图形化连接CentOS7

    前提:CentOS已经安装图形化,安装教程可以百度 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) 安装 ...

  3. go语言从例子开始之Example17.指针

    Go 支持 指针,允许在程序中通过引用传递值或者数据结构 Example: package main import "fmt" func zeroval(ival int){ iv ...

  4. Pandas_key_point

    10分钟快速入门pandas: http://pandas.pydata.org/pandas-docs/stable/10min.html ----------------------------- ...

  5. servlet 实践

    基础 当Servlet引擎收到一个请求,它将请求所有的细节汇编到一个HttpServletRequest对象.细节包括请求头部.URI.查询字符串和任意发送的参数等等.类似地,它初始化一个处理响应头部 ...

  6. Java网络编程:OSI七层模型和TCP/IP模型介绍

    OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...

  7. 42th 逻辑的连续性 取决于 细节的理解-------------我是个厨子:类的调用vs 对象调用方法

    类的调用vs 对象调用方法   class Cook5:    '''这是一个厨师的类'''        # 类是一系列对象相同的特征与技能的结合体        # 用变量表示特征(属性)    ...

  8. java 双重校验性volatile

    A a = new A(); 上述可拆分为三个步骤: -1.分配地址 -2.初始化对象 -3.将 变量a 指向这个地址 在准时制生产方式(Just In Time简称JIT)时,可能发生指令重排: 在 ...

  9. mysql协议解析

    目录 目录 1 交互过程 1.1 握手认证阶段 1.2 命令执行阶段 2 基本类型 2.1 整型值 2.2 字符串(以NULL结尾)(Null-Terminated String) 2.3 二进制数据 ...

  10. 21.Semaphore信号量

    Semaphore是一种基于计数的信号量.它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞.Semaphore可以用来构建一些对象池,资 ...