Это возможно с помощью System.Diagnostics.StackTrace.
Например, вы можете получить имя вызывающего метода следующим образом:
private static void stackExample()
{
var stack = new System.Diagnostics.StackTrace(true); // pass true to get more stack info
var callingMethod = stack.GetFrame(1).GetMethod().Name;
var callingLine = stack.GetFrame(1).GetFileLineNumber();
Console.WriteLine("callingMethod: " + callingMethod + " on line " + callingLine.ToString());
}
http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx
Это не даст вам строку кода вызывающего метода, для этого вам понадобится доступ к исходному коду. stack.GetFrame (1) .GetFileName () даст вам имя файла исходного кода, содержащего метод. Отсюда можно получить информацию о методе и номер строки, чтобы открыть исходный файл и получить соответствующую строку кода.
GetMethod () предоставляет вам все виды полезной информации, например, в каком модуле существует метод, и оттуда вы можете получить информацию о сборке.
На самом деле довольно интересно искать среди всех метаданных, он рассказывает вам все интересные вещи о вашем коде.
Причина, по которой вы не можете получить фактическую строку кода, заключается в том, что сам источник в форме C # не сохраняется в сборке. Хотя вы можете получить IL, его немного сложнее читать. :)