Hi,
Here, an example to get the source folder path of CSharp class via a static method and the package System.Runtime.CompilerServices. In fact, we solicit the compiler in order to get some informations about caller (caller line number, caller method, caller file path): https://msdn.microsoft.com/fr-fr/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx.
using System.IO; using System.Runtime.CompilerServices; namespace HuoBlog { public class ModelUtility { public static string getProjectPath([CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { // new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileName(); string currentClassPath = getInternalPath(); string currentProjectPath = Path.GetDirectoryName(currentClassPath); return currentProjectPath; } private static string getInternalPath([CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { return sourceFilePath; } } }
…in the caller method, for example a simple Program.cs, some parameters Callerxxxx are set by compiler:
//... string currentModelProjectPath = ModelUtility.getProjectPath(); //...
//... // [CallerMemberName] string memberName = "Main" // [CallerFilePath] string sourceFilePath = "C:\\Workspaces\\MS_Visual_Studio_Projects\\...\\Program.cs" // [CallerLineNumber] int sourceLineNumber = 38 public static string getProjectPath([CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { //... } //...
//... // [CallerMemberName] string memberName = "getProjectPath" // [CallerFilePath] string sourceFilePath = "C:\\Workspaces\\MS_Visual_Studio_Projects\\...\\ModelUtility.cs" // [CallerLineNumber] int sourceLineNumber = 13 private static string getInternalPath([CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { //... } //...
That’s all!!!!
Huseyin OZVEREN