Getting a specific method source code from .cs file (at runtime)

c#, parsing

Solution

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

Problem

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"; } } ```

Original source

Related problems