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