需:install-package:Microsoft.CodeAnalysis using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.VisualBasic.Syntax;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace RoslynTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = @"
namespace RoslynTest
{
        public interface ICalculator
        {
           
            public static int Evaluate(string a,string b);
            public static string Evaluate2(string a1,string b1);
        }
}";
            string path = @"E:\ND.Application\ND.Lib.Application\NDLib\ND.WebService\ND.WebService.Contract\NDFront.WebService.Contract\hotel\IHotelFacility.cs";
            text = File.ReadAllText(path);
        SyntaxTree tree=  Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(text);
        var root = (Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax)tree.GetRoot();
        var firstMember = root.Members[];
        NamespaceDeclarationSyntax NameSpaceDeclaration = (NamespaceDeclarationSyntax)firstMember;
        InterfaceDeclarationSyntax interfaceDeclaration = (InterfaceDeclarationSyntax)NameSpaceDeclaration.Members[];
        Console.WriteLine("命名空间:" + NameSpaceDeclaration.Name);
        Console.WriteLine("接口名:" + interfaceDeclaration.Identifier.Value);            
        IEnumerable<SyntaxAnnotation> ss = interfaceDeclaration.GetAnnotations("ICalculator");
       ss.ToList().ForEach(x =>
       {
           Console.WriteLine("接口描述:" + x.Data); 
       });
      
        interfaceDeclaration.Members.ToList().ForEach(y =>
        {
            
            MethodDeclarationSyntax methodDeclaration = (MethodDeclarationSyntax)y;
            var paramsDeclaration = methodDeclaration.ParameterList.Parameters;
            
            Console.WriteLine("返回类型:" + methodDeclaration.ReturnType + "方法名称:" + methodDeclaration.Identifier);
            paramsDeclaration.ToList().ForEach(x =>
            {
                
                Console.WriteLine("参数类型:" + x.Type + ",参数名称:" + x.Identifier);
            });
        });
            
     
       
          Console.ReadKey();
        }       
    }

Roslyn词法分析器初使用的更多相关文章

  1. Roslyn 编译器和RyuJIT 编译器

    Roslyn 编译器 https://msdn.microsoft.com/zh-cn/library/mt162308.aspx https://blogs.msdn.microsoft.com/d ...

  2. 使用 Roslyn 编译器服务

    .NET Core和 .NET 4.6中 的C# 6/7 中的编译器Roslyn 一个重要的特性就是"Compiler as a Service",简单的讲,就是就是将编译器开放为 ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  6. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  7. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  8. 【初码干货】在Window Server 2016中使用Web Deploy方式发布.NET Web应用的重新梳理

    在学习和工作的过程中,发现很多同事.朋友,在做.NET Web应用发布的时候,依然在走 生成-复制到服务器 这样的方式,稍微高级一点的,就是先发布到本地,再上传到服务器 这种方式不仅效率低下,而且不易 ...

  9. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

随机推荐

  1. How to Prevent Cross-Site Scripting Attacks

    How to Prevent Cross-Site Scripting Attacks Reference From: http://resources.infosecinstitute.com/ho ...

  2. win7、win8上SaveFileDialog窗口跳不出的问题

    xp上做的开一个线程 线程中数据以Excel形式保存到指定文件中的程序  放到win7 win8上都不跳出保存的对话框? 解决: 在win7.win8上都要对线程  在线程启动前设置其单元状态.设置为 ...

  3. CF 208A Dubstep(简单字符串处理)

    题目链接: 传送门 Dubstep Time Limit: 1000MS     Memory Limit: 32768 KB Description Vasya works as a DJ in t ...

  4. Thenao tutorial – indexing

    Theano和numpy一样,支持基本的下标取值方法和高级的下标取值方法. 因为theano中没有boolean类型,所以不支持boolean类型的masks. # head file support ...

  5. BZOJ3685: 普通van Emde Boas树

    显然这题的所有操作都可以用set,但是直接用set肯定要T,考虑到读入量较大,使用fread读入优化,就可以卡过去了. #include<bits/stdc++.h> using name ...

  6. wcf第2步之服务端标准配置文件

    服务端app.config <?xml version="1.0" encoding="utf-8" ?><configuration> ...

  7. MSMQ 学习(1)

    在 Windows Server 2008 or Windows Server 2008 R2 上安装消息队列 4.0 在服务器管理器中,单击“功能”. 在“功能摘要”下的右窗格中,单击“添加功能”. ...

  8. spring-boot-cli

  9. Spring浅探

    热度最大的框架,它也称为业务层框架.Spring这个框架的诞生,给程序员揭示了两个主要的思想:Ioc,Aop: 最近的网页架构可以分为这样. 传统结构中,每个层都得new出依赖层的类进行一些本层操作, ...

  10. 添加IP安全策略 远离系统Ping漏洞的威胁

    懂得网络的人对于Ping这个最基本的网络命令一定很熟悉,它是一个非常好用的TCP/IP工具.它可以向你提供的地址发送一个小的数据包,然后侦听这台机器是否有“回答”.你可以使用机器的 Internet ...