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で実行されている場合、c :\ Foo \ Bar\logslogsDirectoryを指し ます。

于 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

スコット・ハンゼルマンのブログ投稿には次のようなものがあります。

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)}");
        }
    }

彼はこれを.NETCore3.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 に答える