Учитывая, что файл данных отладки доступен (PDB) и с помощью System.Reflection или другой подобной структуры, такой как Mono.Cecil, как получить программную имя исходного файла и номер строки, в которой объявлен тип или член типа.
Например, скажем, вы скомпилировали этот файл в сборку:
C:\MyProject\Foo.cs
1: public class Foo
2: {
3: public string SayHello()
4: {
5: return "Hello";
6: }
7: }
Как сделать что-то вроде:
MethodInfo methodInfo = typeof(Foo).GetMethod("SayHello");
string sourceFileName = methodInfo.GetSourceFile(); // ?? Does not exist!
int sourceLineNumber = methodInfo.GetLineNumber(); // ?? Does not exist!
sourceFileName будет содержать "C:\MyProject\Foo.cs", а sourceLineNumber будет равно 3.
Обновление: System.Diagnostics.StackFrame
действительно может получить эту информацию, но только в области текущего исполняемого стека вызовов. Это означает, что сначала нужно вызвать метод. Я хотел бы получить ту же информацию, но не вызывая член типа.