Как найти FULL имя метода вызова С#

Как найти полное имя вызывающего метода в С#. Я видел решения:

Как я могу получить вызовы в С#

Как найти метод, который вызвал текущий метод?

Получить имя функции вызова из вызываемой функции

Но они только дают мне верхний уровень. Рассмотрим пример:

namespace Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            test();
        }

        static void test()
        {
            var stackTrace = new StackTrace();
            var methodBase = stackTrace.GetFrame(1).GetMethod();
            Console.WriteLine(methodBase.Name);
        }
    }
}

Это просто выводит "Main". Как я могу заставить его печатать "Sandbox.Program.Main"?

Прежде чем кто-нибудь начнет спрашивать, зачем мне это нужно, его для простой структуры ведения журнала, над которой я работаю.

ИЗМЕНИТЬ

Добавление на Matzi Ответ:

Вот решение:

namespace Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            test();
        }

        static void test()
        {
            var stackTrace = new StackTrace();
            var methodBase = stackTrace.GetFrame(1).GetMethod();
            var Class = methodBase.ReflectedType;
            var Namespace = Class.Namespace;         //Added finding the namespace
            Console.WriteLine(Namespace + "." + Class.Name + "." + methodBase.Name);
        }
    }
}

Создает "Песочницу". "Программа". Как правило, она должна

Ответы

Ответ 1

Это что-то вроде здесь.

MethodBase method = stackTrace.GetFrame(1).GetMethod();
string methodName = method.Name;
string className = method.ReflectedType.Name;

Console.WriteLine(className + "." + methodName);

Ответ 2

Я думаю, что лучший способ получить полное имя:

 this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name;

или попробуйте это

string method = string.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name);   

Ответ 3

в System.Reflection.MethodBase методе GetCurrentMethod вы можете найти полную информацию о callstack, используя классы и т.д.

Ответ 4

С помощью этого метода вы можете надежно получить полное имя

    public void HandleException(Exception ex, [CallerMemberName] string caller = "")
    {
        if (ex != null)
        {
            while (ex.InnerException != null)
                ex = ex.InnerException;

            foreach (var method in new StackTrace().GetFrames())
            {
                if (method.GetMethod().Name == caller)
                {
                    caller = $"{method.GetMethod().ReflectedType.Name}.{caller}";
                    break;
                }
            }

            Console.WriteLine($"Exception: {ex.Message} Caller: {caller}()");
        }
    }