Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

1 - I have this file content on the disc (cs file, not compiled):

    namespace Test
    {
        using System;
        public class TestClass 
        {
            public string SomeTestMethod(){
                return "test here";
            }
        }
    }

How do I get in run time into a variable the method:

public string SomeTestMethod(){
    return "test here";
}

for example: SourceCodeParser.GetMothod("path to file","SomeTestMethod");

2 - Is it possible the content of accessor member?

   public string SomeMember {
        get {
            return "test here";
        }
    }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
327 views
Welcome To Ask or Share your Answers For Others

1 Answer

Roslyn is what you need. You can easily install it using nuget. Here is a working code for getting a method body:

string GetMethod(string filename, string methodName)
{
    var syntaxTree = SyntaxTree.ParseFile(filename);
    var root = syntaxTree.GetRoot();
    var method = root.DescendantNodes()
                     .OfType<MethodDeclarationSyntax>()
                     .Where(md => md.Identifier.ValueText.Equals(methodName))
                     .FirstOrDefault();
    return method.ToString();
}

and code for getting body of property getter:

string GetPropertyGetter(string filename, string propertyName)
{
    var syntaxTree = SyntaxTree.ParseFile(filename);
    var root = syntaxTree.GetRoot();
    var property = root.DescendantNodes()
                       .OfType<PropertyDeclarationSyntax>()
                       .Where(md => md.Identifier.ValueText.Equals(propertyName))
                       .FirstOrDefault();
    var getter = property.AccessorList.Accessors.First(a => a.Kind == SyntaxKind.GetAccessorDeclaration);
    return getter.ToString();
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...