![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Hmm3 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
Создаю библиотеку. Создаю ей ключ (sn), далее добавляю ее с GAC c помощью gacutil.
К проекту добавляю библиотеку через Add Reference\Browse. Вопрос: как проверить существует ли еще библиотека при запуске программы (проекта)? И в случае отсутствия выдавать ошибку. |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Ну так если CLR не найдёт твою dll, то кинет FileNotFoundException... его и лови.
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Hmm3, GAC - это C:\Windows\assembly. Правда по сути это не простая папка; если ее просмотреть, например, под FAR-ом, в ней будет совсем не то что видно в windows explorer-е. В любом случае - думаю если будете искать рекурсивно свою dll-ину в папке и подпапках C:\Windows\assembly, решите проблему.
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Немного покопался, так как самому стало интересно. Добавлю еще вот это:
Это сообщение отредактировал(а) Rockie - 26.9.2008, 16:48 -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Hmm3 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
Угу.У меня в папке "assembly" 6 папок:
assembly\GAC_MSIL\[имя]\[версия]__[ключ(?)]\[имя].dll Так, для моей библиотеки полный путь таков c:\WINDOWS\assembly\GAC_MSIL\TestLibrary\1.0.0.0__f45871145e1b89fd\TestLibrary.dll Зная имя, версию и ключ(?) можно генерировать имя и проверять файл на наличие. Второй путь. В реестре по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\GACChangeNotification\Default Находится куча значений. Туда добавляется и значение с именем, версией, и ключом библиотеки. Можно брать все имена значений. В цикле их перебирать -- искать имя своей библиотеки. Потом из найденного вытаскивать версию и ключ. Так для моей библиотеки двоичный параметр Имя: TestLibrary,1.0.0.0,,f45871145e1b89fd,MSIL Значение 53 E3 DB 42 B8 23 C9 01 Т.е Имя формируется по принципу [имя],[версия],,[ключ],[MSIL] Просто была надежда что есть какие-то встроенные средства для таких проверок. Тем более что GAC -- не посторонняя технология. И неизвестно что и куда будет писаться в следующих версиях Windows. P.S. Ошибка которая возникает при отсутствии библиотеки try- catch' ом не ловится |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Hmm3, проще
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| XenoCode |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
||||
|
||||
| Hmm3 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
Только в том случае если библиотека единственная и неповторимая. А их может быть несколько. (Это же представляется как один из плюсов GAC'a). |
||||
|
|||||
| Rockie |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Уверены? У вас есть в GAC-е дублирующаяся dll-ka "Microsoft.Interop.Security.AzRoles.dll"? Введите
и в цикле
Что у вас выводится? -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
| Hmm3 |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
Спасибо. Вот и третий способ
Хм. У меня ничего. Пусто. filesArray пустой. |
||||||||
|
|||||||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Hmm3, на месте AzRoles.dll может быть любой другой файл - это пример dll-ки, несколько экземпляров которой лежит в GAC:
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Hmm3 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
Я не спорю, но так заодно можно проверить версию библиотеку. (Если это, конечно необходимо). Если нет, то больше подходит такой способ. Будем считать его четвертым. |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |