How to find path to .cs file by its type in C#

Solution 1:

In .Net 4.5 you can use the CallerFilePath reflection attribute (from 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

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

Solution 2:

That's not possible, there is no such relation. A class can be partial, so it can even come from several different source files.

Solution 3:

All classes get compiled in assemblies (.exe or .dll). I don't think you can get the path to the source file of a class, because that class might not even exist (if you have copied the .exe file to another machine).

But you can get the path to the current assembly (.exe file) that is running. Check out this answer: Get the Assembly path C#

string file = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;