99

如何使用 C# 找出我的控制台应用程序在哪个目录中运行?

4

8 回答 8

174

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

AppDomain.CurrentDomain.BaseDirectory

获取当前目录:

Environment.CurrentDirectory
于 2008-09-18T21:45:45.560 回答
15

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

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

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

于 2008-09-18T22:06:06.430 回答
5

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

于 2010-03-02T18:34:12.850 回答
3

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

于 2008-09-18T21:47:26.803 回答
2

假设您的 .Net 核心控制台应用程序项目名称是 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\

于 2019-10-24T18:48:21.673 回答
1

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

在 C/C++ 中,argv* 中的第一个项目

WinAPI - GetModuleFileName(NULL, char*, MAX_PATH)

于 2008-09-18T21:45:43.080 回答
1

应用程序.StartUpPath;

于 2009-02-19T05:22:04.517 回答
0

用于AppContext.BaseDirectory.net5。

于 2020-07-31T04:46:50.513 回答