如何获取当前C#源代码文件或文件存储目录的路径? (我自己回答了这个问题,因为我没有通过Google搜索找到任何内容。)
(注意:这不是要求Assembly.GetEntryAssembly().Location
,它提供可执行文件的路径,也不是Directory.GetCurrentDirectory()
,它提供了从中调用进程的目录。)
答案 0 :(得分:2)
这样做:
using System.Runtime.CompilerServices;
private static string GetThisFilePath([CallerFilePath] string path = null)
{
return path;
}
var path = GetThisFilePath(); // path = @"path\to\your\source\code\file.cs"
var directory = Path.GetDirectoryName(path); // directory = @"path\to\your\source\code"
工作原理:Roslyn特别识别CallerFilePath
,CallerLineNumber
和CallerMemberName
属性(如果你&#39,最后一个可能看起来很熟悉;已完成一些MVVM编程)。在编译时,它使用这些属性标记的参数填充调用者的实际文件路径/行号/成员名称。如果您编译并反编译上述代码,则path
的分配将如下所示
var path = GetThisFilePath(@"path\to\your\source\code\file.cs");