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

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

что я нашел:

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

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

4 ответов


если вы все еще хотите использовать приложение.ExecutablePath в консольном приложении вам нужно:

  1. добавить ссылку на System.Окна.Формы пространства имен
  2. Добавить Системы.Окна.Формы для вашего пользования раздел

    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.IO, ни System.Windows.Forms затем вы должны следовать ответу Реймеуса.


приложение недоступно для консольных приложений, это для windows forms.

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

Environment.CurrentDirectory

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

AppDomain.CurrentDomain.BaseDirectory

остерегайтесь, есть несколько методов и ловушек для путей.

  • какое место вы ищете? Рабочий каталог, the .Каталог EXE, каталог DLL?

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

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

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

Application.ExecutablePath

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

Directory.GetCurrentDirectory
Environment.CurrentDirectory

если программа запускается с помощью ярлыка, реестра, диспетчера задач, они дадут папку "Пуск В", которая может отличаться от .Расположение EXE.

AppDomain.CurrentDomain.BaseDirectory

в зависимости от того, как это сказывается ли в нем косую черту. Это может сломать вещи, например GetDirectoryName() не считает косую черту файлом и удалит последний часть.

любой из них-моя рекомендация, работающая как в форме, так и в консольных приложениях:

var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
or
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

при использовании в основной программе, как идентичных. Если используется в DLL, первый возвращает .EXE каталог, который загрузил DLL, второй возвращает каталог DLL.


попробовать Directory.GetCurrentDirectory