69

我尝试使用以下代码获取控制台应用程序的目录,

Assembly.GetExecutingAssembly().Location

但这一个给了我组装所在的位置。这可能与我执行应用程序的位置不同。

我的控制台应用程序解析没有参数的日志。它必须转到logs/可执行文件文件夹内的文件夹,或者如果我给它一个路径来logs/解析它。

4

5 回答 5

112

使用Environment.CurrentDirectory.

获取或设置当前工作目录的标准路径。
(MSDN Environment.CurrentDirectory 属性

string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs");

如果您的应用程序在c:\Foo\Bar logsDirectory中运行,则将指向 c:\Foo\Bar\logs

于 2012-06-12T09:21:08.650 回答
45

用这个 :

System.Reflection.Assembly.GetExecutingAssembly().Location

将其与

System.IO.Path.GetDirectoryName if all you want is the directory.
于 2012-06-12T09:29:07.920 回答
8

最安全的方式:

string temp = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
于 2012-06-12T09:22:08.567 回答
7

Scott Hanselman 有一篇文,内容如下:

using System;
using System.Diagnostics;
using System.IO;
 
namespace testdir
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"Launched from {Environment.CurrentDirectory}");
            Console.WriteLine($"Physical location {AppDomain.CurrentDomain.BaseDirectory}");
            Console.WriteLine($"AppContext.BaseDir {AppContext.BaseDirectory}");
            Console.WriteLine($"Runtime Call {Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)}");
        }
    }

他在 .NET Core 3.1 中使用它,但是,我正在运行 .NET 4.8,它对我有用。

于 2021-01-07T20:58:54.137 回答
4

这是一个简单的日志记录方法

using System.IO;
private static void logWrite(string filename, string text)
{
    string filepath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\" + filename;

    using (StreamWriter sw = File.AppendText(filepath))
    {
        sw.WriteLine(text);
        Console.WriteLine(text);
    }
}

用法:

logWrite("Log.txt", "Test");
于 2019-04-19T17:37:30.337 回答