我在谷歌上发现了一些内容,但它不适用于C#控制台应用程序
我找到了什么:
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
如何使用c#控制台应用程序获取应用程序目录?
答案 0 :(得分:13)
应用程序不适用于控制台应用程序,它适用于Windows窗体。
要获取工作目录,您可以使用
Environment.CurrentDirectory
另外,要获取可执行文件的目录,可以使用:
AppDomain.CurrentDomain.BaseDirectory
答案 1 :(得分:9)
如果您仍想在控制台应用程序中使用Application.ExecutablePath,则需要:
将System.Windows.Forms添加到您的使用部分
using System;
using System.IO;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string appDirectory = Path.GetDirectoryName(Application.ExecutablePath);
Console.WriteLine(appDirectory);
}
}
}
此外,您可以使用Directory.GetCurrentDirectory()
代替Path.GetDirectoryName(Application.ExecutablePath)
,因此您不需要对System.Windows.Forms的引用。
如果您不想同时包含System.IO
或System.Windows.Forms
名称空间,那么您应该遵循Reimeus的回答。
答案 2 :(得分:7)
注意,路径有几种方法和PITFALLS。
你在哪个位置?工作目录,.EXE目录,DLLs目录?
您是否希望代码也适用于服务或控制台应用程序?
如果目录的尾部斜杠不一致,您的代码是否会中断?
让我们看看一些选项:
Application.ExecutablePath
需要添加引用并加载Application命名空间。
Directory.GetCurrentDirectory
Environment.CurrentDirectory
如果程序是由快捷方式,注册表,任务管理器运行的,那么这些将给出“开始”和“快速启动”。文件夹,可以与.EXE位置不同。
AppDomain.CurrentDomain.BaseDirectory
取决于它的运行效果是否包含尾部斜杠。这可能会破坏事物,例如GetDirectoryName()认为没有斜杠是文件,并将删除最后一部分。
这些都是我的建议,在Form和Console应用程序中工作:
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
or
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
在主程序中使用时,两者都是不同的。如果在DLL中使用,则第一个返回加载DLL的.EXE目录,第二个返回DLLs目录。
答案 3 :(得分:3)
答案 4 :(得分:0)
我知道已经很长时间了,但是Assembly.GetExecutingAssembly().CodeBase
为我工作。您只需要用它替换Application.ExecutablePath
。
当然您必须添加using System.Reflection;
我尝试使用System.Windows.Forms
,但这给了我一个例外