如何获取当前C#源代码文件的路径?

13

如何获取当前C#源代码文件的路径,或存储文件的目录?(我回答这个问题是因为在Google搜索中找不到相关信息。)

注意:这不是要求使用Assembly.GetEntryAssembly().Location,它会返回可执行文件的路径,也不是使用Directory.GetCurrentDirectory(),它会返回启动该进程的目录。)


2
通常情况下,源代码不会在运行它的机器上 - 这只是开发人员的特权...但你可以从构建机器获取路径... - Marc Gravell
2
@MarcGravell 说得好。是的,这不是为生产代码而设计的;只有在您在编译它的同一台机器上运行代码时才会使用它。 - James Ko
1个回答

32

这样做:

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 特别识别 CallerFilePathCallerLineNumberCallerMemberName 属性(如果您曾经进行过一些 MVVM 编程,则最后一个属性可能会很熟悉)。在编译时,它将带有这些属性标记的参数填充为调用者的实际文件路径/行号/成员名称。如果您编译并反汇编上面的代码,则对 path 的赋值将如下所示:

var path = GetThisFilePath(@"path\to\your\source\code\file.cs");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接