如何查找控制台应用程序所在的目录?

103

如何使用 C# 查找控制台应用程序所在的目录?

9个回答

179

获取.exe文件所在的目录:

AppDomain.CurrentDomain.BaseDirectory

获取当前目录:

Environment.CurrentDirectory

3
谢谢。当C# .exe在一个文件夹中,但是从另一个文件夹中调用时有帮助(例如:当它在系统路径上时)。 - DeepSpace101
17
对于.NET Core,其对应的是System.AppContext.BaseDirectory - NightOwl888

17

根据授予应用程序的权限,无论是否生效 影子复制 ,以及其他调用和部署选项,不同的方法可能会起作用或产生不同的结果,因此您需要明智地选择。话虽如此, 对于在本地执行的完全受信任的控制台应用程序,以下所有内容将产生相同的结果:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

您需要查阅上述成员的文档以了解所需的确切权限。


5

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)


4
在.NET中,您可以使用System.Environment.CurrentDirectory来获取启动进程的目录。
System.Reflection.Assembly.GetExecutingAssembly().Location将告诉您当前正在执行的程序集的位置(仅在当前执行的程序集从启动进程的位置不同的地方加载时才有趣)。

3
假设您的 .Net Core 控制台应用程序项目名称为 DataPrep。
获取项目基础目录:
Console.WriteLine(Environment.CurrentDirectory);

输出: ~DataPrep\bin\Debug\netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

输出:~DataPrep\


1

在Windows操作系统上(不确定Unix等其他操作系统),它是命令行中的第一个参数。

在C/C++中,它是argv*中的第一项。

WinAPI - GetModuleFileName(NULL, char*, MAX_PATH)


是的,在.NET中也是一样的。第一个参数始终是可执行文件的完整路径。 - Adam Neal

0

Application.StartUpPath;


介意提供一些文档链接吗? - John Sheehan

0

在 .net5 中使用 AppContext.BaseDirectory


0
另一个解决方案是使用方法Directory.GetCurrentDirectory
string currentDirectory = Directory.GetCurrentDirectory();
Console.WriteLine("Working dir: " + currentDirectory);

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