如何使用 C# 找出我的控制台应用程序在哪个目录中运行?
8 回答
要获取 .exe 文件所在的目录:
AppDomain.CurrentDomain.BaseDirectory
获取当前目录:
Environment.CurrentDirectory
根据授予应用程序的权限、卷影复制是否有效以及其他调用和部署选项,不同的方法可能会起作用或产生不同的结果,因此您必须明智地选择武器。话虽如此,对于在其所在机器上本地执行的完全受信任的控制台应用程序,以下所有内容都将产生相同的结果:
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。
获取项目基础目录:
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\
在 Windows 上(不确定 Unix 等),它是命令行中的第一个参数。
在 C/C++ 中,argv* 中的第一个项目
WinAPI - GetModuleFileName(NULL, char*, MAX_PATH)
应用程序.StartUpPath;
用于AppContext.BaseDirectory
.net5。