13

мне нужно получить путь (а не исполняемый), где мое приложение работает с:Исполняемый каталог, в котором работает приложение?

System.AppDomain.CurrentDomain.BaseDirectory() 

Когда я запускаю выше заявление с & «/images/image.jpg» на моей локальной машине он работает отлично но когда я устанавливаю приложение на другой компьютер, он говорит, что не может найти файл, и есть много дополнительной информации о пути.

Мне просто нужен каталог того, где приложение работает. Я кодирую в VB.NET с Visual Studio 2008.

Спасибо!

+0

Не знаю много о vs 2008, но когда вы делаете dirinfo, вы не получаете dirinfo из приложения. бежит? – Grumpy

+0

Возможный дубликат [Получить программный путь?] (Http://stackoverflow.com/questions/2216141/get-programs-path) –

ответ

26
Dim strPath As String = System.IO.Path.GetDirectoryName(_ 
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 

Взятые из HOW TO: Determine the Executing Application's Path (MSDN)

+6

strPath содержит ** файл **: \\ c: \\ xxxxxx – Kraken101

+0

Это небезопасно, например, когда он используется для открытия файла конфигурации, он вызывает 'System.Configuration.ConfigurationErrorsException: произошла ошибка при загрузке файла конфигурации: URI форматы не поддерживаются – 2016-11-10 03:28:28

+0

Ответ от MrCalvin работает в этом случае – 2016-11-10 03:31:38

0

Вы можете написать следующее:

Path.Combine(Path.GetParentDirectory(GetType(MyClass).Assembly.Location), "Images\image.jpg") 
+1

Есть ли подходы к этому подходу, поскольку сборка не обязательно находится в том же каталоге, что и исполняемый сборка. –

4

Вы можете использовать статический StartupPath свойство класса Application.

12
Dim P As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 
P = New Uri(P).LocalPath 
20

Это первое сообщение в google, поэтому я думал, что опубликую различные способы, которые доступны и как они сравниваются. К сожалению, я не могу понять, как создать таблицу здесь, так что это образ. Код для каждого из них ниже изображения с использованием полностью определенных имен.

enter image description here

My.Application.Info.DirectoryPath 

Environment.CurrentDirectory 

System.Windows.Forms.Application.StartupPath 

AppDomain.CurrentDomain.BaseDirectory 

System.Reflection.Assembly.GetExecutingAssembly.Location 

System.Reflection.Assembly.GetExecutingAssembly.CodeBase 

New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase) 

Path.GetDirectoryName(Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path))) 

Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path)) 
6

мне нужно знать это и пришел сюда, прежде чем я вспомнил, класс окружающей среды.

Если у кого-то еще была эта проблема, просто используйте это: Environment.CurrentDirectory.

Пример:

Dim dataDirectory As String = String.Format("{0}\Data\", Environment.CurrentDirectory) 

При запуске из Visual Studio в yeilds режиме отладки:

C:\Development\solution folder\application folder\bin\debug 

Это точное поведение мне было нужно, и его простой и достаточно простым.

+1

Самое маленькое, простое решение с форматированием! +1, спасибо. – rdtsc

+0

Да, это поможет сделать приложение действительно портативным, сохранив файл настроек в корневом пути приложения. Спасибо за простое решение! –