Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c#

parsing

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";
        }
    }
like image 784
SexyMF Avatar asked Dec 02 '13 21:12

SexyMF


People also ask

How do you access a method in C#?

In C#, every executed instruction is performed in the context of a method. The Main method is the entry point for every C# application and it's called by the common language runtime (CLR) when the program is started.

What does the new () method do when called for a particular class?

new ) the method new in Class is called; it calls allocate to allocate space for the new object, then it calls the initialize method of the object that's been allocated, passing it the arguments of the call to new (if any).

What is method group in C#?

With respect to delegates, method groups provide a simple syntax to assign a method to a delegate variable. This syntax does not require explicitly invoking the delegate's constructor. Method groups allow using overloads of the method.

What is method in C# with example?

Example: Method Return Typeint sum = addNumbers(); Here, we are storing the returned value from the addNumbers() to sum. We have used int data type to store the value because the method returns an int value. Note: As the method is static we do not create a class object before calling the method.


1 Answers

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();
}
like image 144
Konrad Kokosa Avatar answered Oct 26 '22 17:10

Konrad Kokosa