如何在C#中按类型查找.cs文件的路径

sat*_*ite 6 c#

如何按类型查找.cs文件的路径?

功能原型:

string FindPath(Type);

返回类似"C:\ Projects\.....\MyClass.cs"的内容

Dav*_*vre 18

在.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
Run Code Online (Sandbox Code Playgroud)

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


Guf*_*ffa 5

那是不可能的,没有这种关系.一个类可以是部分的,所以它甚至可以来自几个不同的源文件.

  • @TimS.:调试信息在那里,所以有可能以某种方式挖掘它,但你只能获得每个语句的源文件,而不是每个类. (3认同)

Ove*_*Ove 3

所有类都在程序集(.exe 或 .dll)中编译。我认为您无法获取类的源文件的路径,因为该类甚至可能不存在(如果您已将 .exe 文件复制到另一台计算机)。

但您可以获得当前正在运行的程序集(.exe 文件)的路径。查看这个答案:获取程序集路径 C#

string file = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;
Run Code Online (Sandbox Code Playgroud)