如何使用 C# 找出我的控制台应用程序在哪个目录中运行?
获取.exe文件所在目录:
1
| AppDomain.CurrentDomain.BaseDirectory |
获取当前目录:
1
| Environment.CurrentDirectory |
根据授予您的应用程序的权限、卷影复制是否有效以及其他调用和部署选项,不同的方法可能会起作用或产生不同的结果,因此您必须明智地选择您的武器。话说回来,
对于在其所在机器上本地执行的完全受信任的控制台应用程序,以下所有内容都将产生相同的结果:
1 2 3 4
| Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName ); |
您需要查阅上述成员的文档以查看所需的确切权限。
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
在 .NET 中,您可以使用 System.Environment.CurrentDirectory 来获取启动进程的目录。
System.Reflection.Assembly.GetExecutingAssembly().Location 会告诉你当前正在执行的程序集的位置(只有当当前正在执行的程序集是从与进程开始的程序集位置不同的地方加载时才有意义)。
假设您的 .Net 核心控制台应用程序项目名称是 DataPrep。
获取项目基础目录:
1
| Console.WriteLine(Environment.CurrentDirectory); |
输出:~DataPrep\\\\bin\\\\Debug\\
ecoreapp2.2
1 2 3
| Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\\..\\.."));
Console.WriteLine(ProjectDirPath); |
输出:~DataPrep\\\\
Application.StartUpPath;
在 windows 上(不确定 Unix 等)它是命令行中的第一个参数。
在 C/C 中,argv 中的第一个项目*
WinAPI - GetModuleFileName(NULL, char*, MAX_PATH)
将 AppContext.BaseDirectory 用于 .net5。