我从哪里开始?
在我目前的解决方案中,我有这样的模型:
public class MyAwesomeModel
{
....
}
我想采用roslyn代码项目来解析源文件并遍历语法树以生成新的代码文件。获取这些源文件并将它们添加到c#项目文件中,以便在visual studio中再次导入我的解决方案。
我从哪里开始。克隆roslyn并编写一个控制台应用程序,引用所有roslyn并开始挖掘roslyn以了解如何,或者是否有任何博客,documentatino显示这样的内容。
答案 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));
}
}