使用开源发布的“roslyn”来读取代码文件并生成新的代码文件

时间:2014-04-05 10:41:03

标签: c# roslyn

我从哪里开始?

在我目前的解决方案中,我有这样的模型:

public class MyAwesomeModel
{
 ....
}

我想采用roslyn代码项目来解析源文件并遍历语法树以生成新的代码文件。获取这些源文件并将它们添加到c#项目文件中,以便在visual studio中再次导入我的解决方案。

我从哪里开始。克隆roslyn并编写一个控制台应用程序,引用所有roslyn并开始挖掘roslyn以了解如何,或者是否有任何博客,documentatino显示这样的内容。

1 个答案:

答案 0 :(得分:4)

这有点容易。

创建一个控制台应用和参考:

  <package id="Microsoft.CodeAnalysis.CSharp" version="0.6.4033103-beta" targetFramework="net45" />

以下是访问源文本中所有属性的程序:

 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 (!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)
        {

            var code =
@"              using System; 
                using System.Collections.Generic; 
                using System.Linq; 
                using System.Text; 

                namespace HelloWorld 
                { 
                    public class MyAwesomeModel
                    {
                        public string MyProperty {get;set;}
                        public int MyProperty1 {get;set;}
                    }

                }";

            var tree = CSharpSyntaxTree.ParseText(code);

            var root = (CompilationUnitSyntax)tree.GetRoot();
            var modelCollector = new ModelCollector();
            modelCollector.Visit(root);
            Console.WriteLine(JsonConvert.SerializeObject(modelCollector.models));


        }
    }