.NETのTypeオブジェクトを考えると、ソースコードのファイル名を取得することは可能ですか?これはデバッグビルドでのみ使用可能であり、それで問題ありません。また、StackTraceオブジェクトを使用して、コールスタック内の特定のフレームのファイル名を取得できることも知っていますが、それは私が望んでいることではありません。
しかし、特定のSystem.Typeのソースコードファイル名を取得することは可能ですか?
.NETのTypeオブジェクトを考えると、ソースコードのファイル名を取得することは可能ですか?これはデバッグビルドでのみ使用可能であり、それで問題ありません。また、StackTraceオブジェクトを使用して、コールスタック内の特定のフレームのファイル名を取得できることも知っていますが、それは私が望んでいることではありません。
しかし、特定のSystem.Typeのソースコードファイル名を取得することは可能ですか?
少なくとも C# が部分的なクラス宣言 (たとえば、public partial class Foo
2 つのソース コード ファイル) をサポートしていることを考えると、「特定の System.Type のソース コード ファイル名」は何を意味するのでしょうか? 型宣言が同じアセンブリ内の複数のソース コード ファイルにまたがっている場合、宣言が始まるソース コード内の単一のポイントはありません。
@Darin Dimitrov: これは、「型メンバーのソース ファイル名と行番号を取得する方法」の重複のようには見えません。私にとっては、それは type memberに関するものですが、この質問はtypeに関するものです。
次のようなコードを使用して、実行中のメソッドからソース ファイルと行番号を取得しました。
//must use the override with the single boolean parameter, set to true, to return additional file and line info
System.Diagnostics.StackFrame stackFrame = (new System.Diagnostics.StackTrace(true)).GetFrames().ToList().First();
//Careful: GetFileName can return null even though true was specified in the StackTrace above. This may be related to the OS on which this is running???
string fileName = stackFrame.GetFileName();
string process = stackFrame.GetMethod().Name + " (" + (fileName == null ? "" : fileName + " ") + fileLineNumber + ")";