12

タイプ別に.csファイルへのパスを見つける方法は?

関数のプロトタイプ:

string FindPath(Type);

「C:\Projects\.....\MyClass.cs」のようなものを返します

4

4 に答える 4

29

.Net 4.5 では、リフレクション属性を使用できCallerFilePathます (MSDN から):

// using System.Runtime.CompilerServices 
// using System.Diagnostics; 

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string sourceFilePath = "",
        [CallerLineNumber] int sourceLineNumber = 0)
{
    Trace.WriteLine("message: " + message);
    Trace.WriteLine("member name: " + memberName);
    Trace.WriteLine("source file path: " + sourceFilePath);
    Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output: 
//  message: Something happened. 
//  member name: DoProcessing 
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs 
//  source line number: 31

参照: http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callerfilepathattribute(v=vs.110).aspx

于 2014-03-03T14:04:25.367 に答える
6

ありえない、そんな関係はない。クラスは部分的である可能性があるため、複数の異なるソース ファイルから取得することもできます。

于 2012-06-09T10:21:35.623 に答える
3

すべてのクラスは、アセンブリ (.exe または .dll) にコンパイルされます。クラスが存在しない可能性があるため (.exe ファイルを別のマシンにコピーした場合)、クラスのソース ファイルへのパスを取得できないと思います。

ただし、実行中の現在のアセンブリ (.exe ファイル) へのパスを取得できます。この回答を確認してください:アセンブリ パスを取得する C#

string file = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;
于 2012-06-09T10:09:40.853 に答える