Получить каталог приложений с помощью консольного приложения С#?

Я нашел что-то в google, но не работал над консольным приложением С#

Что я нашел:

string appPath = Path.GetDirectoryName(Application.ExecutablePath);

Как я могу получить каталог приложений с помощью консольного приложения С#?

Ответ 1

Если вы все еще хотите использовать Application.ExecutablePath в консольном приложении, вам необходимо:

  • Добавить ссылку на пространство имен System.Windows.Forms
  • Добавить 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

Приложение не доступно для консольных приложений, оно для оконных форм.

Чтобы получить рабочий каталог, вы можете использовать

Environment.CurrentDirectory

Также, чтобы получить каталог исполняемого файла, вы можете использовать:

AppDomain.CurrentDomain.BaseDirectory

Ответ 3

BEWARE, существует несколько методов и PITFALLS для путей.

  • Какое место вы занимаетесь? Рабочий каталог, каталог .EXE, каталог DLLs?

  • Вы хотите, чтобы код был переносимым, а также работает в консольном приложении?

  • Будет ли ваш код нарушен, если каталог имеет несогласованные конечные косые черты?

Давайте посмотрим на некоторые параметры:

Application.ExecutablePath

Требуется добавить ссылку и загрузить пространство имен приложения.

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

При использовании в основной программе оба являются indentical. Если он используется в DLL, первый возвращает каталог .EXE, загружающий DLL, второй возвращает каталог DLL.