Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23

К проекту подключать библиотеки, и в момент обращения проверять версию

09.10.2012, 03:36. Показов 1769. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, коллеги!
Надеюсь на Вашу помощь. Необходимо к проекту подключать библиотеки, и в момент обращения проверять версию, а если есть более новая, то её заменять новой, копируя с сервера. Библиотеки пишутся на C#. Подключаю и вызываю методы через Assembly.LoadFrom. Но если во время сессии программы я уже вызывал из библиотеки какой-то метод, удалить эту библиотеку и заменить на новой версии уже не получается, - она уже используется, а сделать некий unload я не знаю как. Может быть кто-то сталкивался?
Читал про домены приложений, что нужно создавать новый - но уж больно заморочено.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2012, 03:36
Ответы с готовыми решениями:

Как подключать библиотеки DirectX 11 к проекту
Скачал "DirectX SDK" и "DirectX 11", установил, и судя по многочисленным инструкциям после этого в списке ссылок в Visual Basic должны были...

Как подключать ресурсы к проекту?
Подскажите или тыкните носом где можно прочесть, как подключать ресурсы к проекту Cocoa framework и потом их подключать. В MSVS это...

Проверять, были ли обращения к заданной папке со времени, введенного пользователем
Проверять, были ли обращения к заданной папке со времени, введенного пользователем. Вывести список и общий размер файлов с атрибутом...

14
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
09.10.2012, 04:13
C#
1
AssemblyName.GetAssemblyName(filePath).Version;
How to get an assembly version without locking the file?
1
 Аватар для Runa
134 / 87 / 22
Регистрация: 28.08.2009
Сообщений: 363
09.10.2012, 04:15
Если не хочешь заморачиваться с доменами напиши loader, который сначала сливает последнюю версию dll с сервера, а потом запускает твою прогу, тогда выгружать ничего не придется и прога будет работать на свежих dll
1
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23
09.10.2012, 04:24  [ТС]
В том то и штука, - работает к примеру человек в программе, вызывает метод из библиотеки - загружает дочернюю форму, - и если библиотека была переписана, и на сервере лежит новая версия, - она должна обновиться, без перезапуска всего приложения, и вызваться обновлённый метод.

Добавлено через 5 минут
а как из этого вызвать метод?
>> AssemblyName.GetAssemblyName(filePath).V ersion;
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
09.10.2012, 05:23
Цитата Сообщение от Eugeney Посмотреть сообщение
а как из этого вызвать метод?
C#
1
AssemblyName.GetAssemblyName(filePath).Version;
Проверяете версию библиотеки (перед загрузкой в память) через значение выше, обновляете ее если нужно, и в память загружаете уже последнюю версию библиотеки.
1
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
09.10.2012, 05:28
Алгоритм прост
1 Запускаешь программу
2 Проверяешь (все?) подгруженные сборки при помощи метода GetAssemblies
3 Качаешь новые версии библиотек. После того как программа полностью загрузилась в память, библиотеки можно удалять/менять
4 Вызываешь Application.Restart()
1
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23
09.10.2012, 06:27  [ТС]
Версию и прочую информацию типа даты и времени изменения файла dll (причем мне кажется по последнему признаку удобнее ориентироваться, нежели чем версия dll, но не суть) взять особой проблемы нет. Проблема в том, что когда из родительской формы открываю упакованную в dll дочернюю, после этого не даёт удалить саму dll-библиотеку.
Про сборки что-то читал, но пока практического опыта с этой штукой нет, и признаюсь понимания тоже. Сборки - это вроде набора библиотек? Я вот читал, что сборки бывают приватными и разделяемыми. Разделяемые можно хранить где-то на сервере и использоваться всеми клиентами?
0
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23
18.10.2012, 06:37  [ТС]
Цитата Сообщение от Yukikaze Посмотреть сообщение
Алгоритм прост
1 Запускаешь программу
2 Проверяешь (все?) подгруженные сборки при помощи метода GetAssemblies
3 Качаешь новые версии библиотек. После того как программа полностью загрузилась в память, библиотеки можно удалять/менять
4 Вызываешь Application.Restart()
Сдаюсь =)
А есть пример хоть какой-нибудь самый завалящий? Ничего найти не могу.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
18.10.2012, 07:03
Evgeniy, я недумаю что ваша программа настолько критична чтобы извращаться подобным образом, реализуйте обычный OnceClick, который позволит делать обновление всего проекта в 1 клик с сервера и не заморачивайтесь
1
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23
18.10.2012, 07:51  [ТС]
А что такое OnceClick? Проблема в том, что в системе работает порядка тысячи пользователей, и как раз в этом проблема и состоит: если меняется библиотека, чтобы программа получила изменённый функционал, её нужно перезагрузить. А когда я в программе делаю Assembly.LoadFrom библиотеки, после этого я библиотеку не могу ни удалить, ни соответственно заменить новой версией, - операционная система блокирует её. Т.е. я вызываю из библиотеки дочернюю форму, после этого закрываю, даже этому объекту делаю =null, а библиотека уже заблокирована. А хотелось бы, чтобы поработал человек в дочерней форме, закрыл, работает в другой, пытается опять открыть первую, и тут программа видит, что для этой библиотеки есть на сервере более новая версия, она её копирует, заменяет заместо старой, и открывает уже новую версию.
Я читал что-то про сборки, дескать есть приватные, а есть разделяемые. Моя модель, если я правильно понимаю, приватная. А разделяемая - это набор библиотек лежит на сервере, и клиентские приложения по мере надобности обращаются к ним и вызывают необходимые методы. Т.е. я изменяю библиотеку, подкладываю вместо старой, и клиентские приложения при следующем вызове обращаются уже к ней, как к новой версии, - прямо с сервера.
Так вот мне и интересно, ведь наверняка кто-то таким занимался, - где можно подсмотреть хотя-бы тривиальный некий пример кода, или что-то почитать, только не абстрактное?
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
18.10.2012, 08:45
вот ссылка на тему
1
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23
26.10.2012, 02:55  [ТС]
Цитата Сообщение от Yukikaze Посмотреть сообщение
Алгоритм прост
1 Запускаешь программу
2 Проверяешь (все?) подгруженные сборки при помощи метода GetAssemblies
3 Качаешь новые версии библиотек. После того как программа полностью загрузилась в память, библиотеки можно удалять/менять
4 Вызываешь Application.Restart()
А сам такое не делал? Ну ничего не получается =)
0
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23
29.10.2012, 06:44  [ТС]
Ну неужели никто не сталкивался???
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,176
Записей в блоге: 6
29.10.2012, 11:44
Вопрос интересный, поэтому попробовал состряпать рецепт на основе многих dll-ок вместо одной.
Пока искал, нашел вот это: http://msdn.microsoft.com/en-u... s.80).aspx
Работа дотнетного кода происходит в т.н. доменах - думаю, копать туда.

Добавлено через 1 минуту
туда же
http://people.oregonstate.edu/... chives/466

Добавлено через 8 минут
и еще вдогонку.
В .net 3.5 появилась такая штука, как add-in's.
http://blogs.msdn.com/b/jackg/... 68068.aspx
http://www.matthidinger.com/ar... h-wpf.aspx
1
2 / 2 / 0
Регистрация: 09.10.2012
Сообщений: 23
30.10.2012, 03:56  [ТС]
Вопрос решил. Всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2012, 03:56
Помогаю со студенческими работами здесь

Проверять, были ли обращения к заданной папке со времени, введенного пользователем
Добрый день. Подскажите пожалуйста, имею такое задание: Проверять, были ли обращения к заданной папке со времени, введенного пользователем....

Как подключать библиотеки?
выделяется серым.. как сделать так, чтобы это было подключено к проекту ? from asyncio import open_connection, get_event_loop, Queue,...

Как подключать библиотеки в VS 2012
Всем доброго времени суток. Я недавно начал изучать С++ и среду програvмирования VS 2012. Такой вопрос, как подключать билиотеки в VS. ...

Как создавать и подключать библиотеки?
Здравствуйте, я искал по форуму в интернете и в книгах, но все что я находил по этому вопросу у меня не работало, поэтому я прошу Вас...

Как подключать dll библиотеки в VS
Когда подключал opencv нужно было просто указать пути к заголовочным и lib файлам. Но вот скачал другую библиотеку, а там никаких .lib и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru