如何获取当前C#源代码文件的路径,或存储文件的目录?(我回答这个问题是因为在Google搜索中找不到相关信息。)
(注意:这不是要求使用Assembly.GetEntryAssembly().Location
,它会返回可执行文件的路径,也不是使用Directory.GetCurrentDirectory()
,它会返回启动该进程的目录。)
如何获取当前C#源代码文件的路径,或存储文件的目录?(我回答这个问题是因为在Google搜索中找不到相关信息。)
(注意:这不是要求使用Assembly.GetEntryAssembly().Location
,它会返回可执行文件的路径,也不是使用Directory.GetCurrentDirectory()
,它会返回启动该进程的目录。)
这样做:
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
属性(如果您曾经进行过一些 MVVM 编程,则最后一个属性可能会很熟悉)。在编译时,它将带有这些属性标记的参数填充为调用者的实际文件路径/行号/成员名称。如果您编译并反汇编上面的代码,则对 path
的赋值将如下所示:
var path = GetThisFilePath(@"path\to\your\source\code\file.cs");