Бывшая функция app.path

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Бывшая функция app.path

Сообщение Ефрейтор » 25.04.2006 (Вт) 19:20

Все мы помним в VB6 была функция получения пути
app.path
Аналога в VB.NET я нашёл два это
1. System.Reflection.Assembly.GetExecutingAssembly.Location
и
2. System.AppDomain.CurrentDomain.BaseDirectory

Причём первый вариант выдаёт непосредственно полный путь к работающей dll, а второй вариант путь к папке с dll. На первый взгляд без разницы каким вариантом пользоваться.
Но первый вариант по факту сделал следующее: было открыто два виндовских приложения в одном из них было определение пути по первому способу. Но когда фокус был на соседнем приложении, то путь к dll определился не для собственного приложения, а для соседнего (?!) причём этот эффект имел какой то нестабильный вероятностный характер. Такого "счастья" конечно не требуется.

В MSDN на это вопрос я ответа не нашёл. Вот и решил спросить. Не подскажите ли люди добрые есть какие-нибудь ососбенности у этих двух способов, какие-нибудь подводные камни? Какой способ всё же надёжнее первый или второй? Конечно можно долго экспериментировать, но может кто уже знает ответ?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 25.04.2006 (Вт) 23:21

1 вариант, правильный. Во 2 ты обжешь обломаться если из DLL вызовешь. Кроме того имей ввиду, что сборка может быть запущена из памяти.

Я думаю, что-то ты напутал. Хотя чем чёрт не шутит.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.04.2006 (Ср) 4:02

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ефрейтор
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 11.02.2005 (Пт) 12:43
Откуда: Алтай

Сообщение Ефрейтор » 26.04.2006 (Ср) 6:08

Sebas
мда...там на путать то нечего было, я сам выпучил глаза :shock: , когда увидел результаты своего творения через
System.Reflection.Assembly.GetExecutingAssembly.Location
что Location присвоил значение с соседнего приложения.
На сколько я понял второй способ не совсем предназначен для Windows приложений, похоже что он для asp.
В принципе, я пока убрал получения пути к dll из класса формы (чтоб присвоение пути не происходило каждый раз при активации формы), а запихнул присаоение пути к dll в глобальную переменную, теперь присвоение происходит один раз при загрузке приложения, вроде пока пашет стабильно.

Sebas
GSerg
Спасибо за диалог.

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 26.04.2006 (Ср) 9:31

Хм... Может, я чего не понял, а чем вас application.StartupPath и Application.ExecutablePath не устраивает?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 26.04.2006 (Ср) 9:37

PUNK-GRUNGER
Тем, что если приложение не содержит Windows Forms (т.е. не импортированы соответствующие пространства имен) то ты попробуй его вызвать :wink:

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 26.04.2006 (Ср) 9:49

Ну тогда по MSDN. Он умный)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.04.2006 (Ср) 9:50

Ramzes писал(а):PUNK-GRUNGER
Тем, что если приложение не содержит Windows Forms (т.е. не импортированы соответствующие пространства имен) то ты попробуй его вызвать :wink:


Ну так, импортни). И не переживай по этому поводу, даже если ты и не указал это в референсах, за тебя её подгрузит VisualBasic.dll
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 26.04.2006 (Ср) 9:52

Sebas
А может я принципиально не хочу импортировать? или у меня сломались на клаве буквы "I", "M", "P", "O", "R", "T" :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList