コード例 #1
0
        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[0];
            NamespaceDeclarationSyntax NameSpaceDeclaration = (NamespaceDeclarationSyntax)firstMember;
            InterfaceDeclarationSyntax interfaceDeclaration = (InterfaceDeclarationSyntax)NameSpaceDeclaration.Members[0];

            Console.WriteLine("命名空间:" + NameSpaceDeclaration.Name);
            Console.WriteLine("接口名:" + interfaceDeclaration.Identifier.Value);
            var collctor = new UsingCollector();//收集非System程序集的引用

            collctor.Visit(root);
            foreach (var item in collctor.Usings)
            {
                Console.WriteLine(item.Name.ToString());
            }

            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();
        }