Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Взаимодействие сборок  (Прочитано 5732 раз)
0 Пользователей и 1 Гость смотрят эту тему.
little
Помогающий

de
Offline Offline
Пол: Мужской

« : 10-08-2007 07:13 » 

Существует несколько приложений, работающих на нескольких сборках. Есть приложение-загрузчик, через которое загружаются эти приложения.
Проблема такая:
- если грузить сборку через Assembly.Load(), то файлы сборки должны находиться там же, где и загрузчик;
- если воспользоваться Assembly.LoadFile(), то работает только загруженная сборка, а остальные сборки этого приложения недоступны (если опять же не положить все сборки в папку загрузчика).
- Assembly.LoadFrom() - не пробовал.

Помещать все в GAC ... - пока решили отказаться от этого.

в общем нужно, чтобы сборки приложений лежали в своих папках и всё работало Улыбаюсь Может, можно как-то сборке указать, где именно ей потом разыскивать другие сборки? Что посоветуете?
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 13-08-2007 08:30 » 

Цитата
Если нам необходимо явным образом указать среде выполнения .NET, где разыс-
кивать ту или иную сборку, в нашем распоряжении файлы конфигурации прило-
жений. Это — обычные текстовые файлы в формате XML. Вся необходимая ин-
формация записывается в них в специальные теги XML. Файлы конфигурации
должны иметь то же самое имя, что и приложение, к которому они относятся, и рас-
ширение *.config.
В файлах конфигурации .NET можно указать подкаталоги, в которых среда
выполнения будет искать сборку. Конечно же, обычно такое решение использует-
ся для больших приложений, в которых сборок много и есть смысл упорядочить
их по разным подкаталогам. Например, предположим, что мы разработали ком-
мерческое приложение с именем MyRadApplication, в каталоге которого находятся
подкаталоги \Iroages, \В1п, \SavedGames и \OtherCoolStuff. При помощи файлов кон-
фигурации мы можем указать те каталоги, в которых среда выполнения .NET бу-
дет производить поиск частных сборок при запуске приложения.


Файл конфигурации должен начинаться с тега <Configuration>. Между этим тегом
и соответствующим ему закрывающим тегом </Configuration> необходимо разместить тег <assemblyBinding>, внутри которого в атрибуте privatePath и указывается
нужный подкаталог с частной сборкой (если вам необходимо указать несколько
подкаталогов, то они перечисляются через точку с запятой). Весь файл конфигу-
рации в нашем случае может выглядеть так:
<configuration>
<runtime>
<assembl,yBi tiding xmlns="urn:schemas-microsoft-corn:asm.vl">
<probing privatePath="foo\bar"/>
</assemblyB1nding>
</runtime>
</configuration>

Только, походу дела , в данном случае все равно все сборки должны быть в подкаталогах главного каталога
Записан

ещё один вопрос ...
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #2 : 13-08-2007 11:22 » 

Спасибо, попробую. Все лучше, чем свалка в одном месте.

Интересно, а GetTypes() из таких сборок сможет нормально работать? Улыбаюсь А то он тоже вылетал в ошибку, если не все сборки на месте были.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 13-08-2007 19:19 » 

не совсем понял вопроса.
Записан

ещё один вопрос ...
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #4 : 14-08-2007 10:41 » 

если в описанном мной в первом посте случае, после загрузки сборки из др. папки, воспользоваться методом GetTypes() - он выдает ошибку. Видимо по тем же причинам - не может найти остальные сборки.

Вот я и думаю, в случае с конфигом, станет ли все нормально работать?
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 14-08-2007 11:21 » 

Попробуй Улыбаюсь
Записан

ещё один вопрос ...
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #6 : 24-09-2007 07:30 » 

Эх, нифига не помогло написание конфига Жаль
Сделал конфиг для дозагружаемой сборки - ноль эмоций. Сделал конфиг для сбоки-загрузчика - прога даже не доходит до проблемного места - вылетает из-за ошибки обращения к БД - похоже умудрилась каким-то образом хапнуть что-то из чужой сборки  Я зол!, хотя как это может произойти - не очень понимаю, - все сборки и библиотеки называются по-разному, за исключением общеиспользуемых (но они-то как раз одинаковые).
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #7 : 25-10-2007 11:52 » 

После некоторых манипуляций заработало через конфиги.

Нашел способ работать и без них. Для этого перед загрузкой сборок нужно в текущий домен приложений добавить пути поиска сборок методом AppDomain.CurrentDomain.AppendPrivatePath(путь). Правда, про него в .Net Framework 2.0 SDK написано, что метод является устаревшим и его использование в дальнейшем не рекомендуется, а вместо него следует пользоваться AppDomainSetup.PrivateBinPath. Но как раз им-то у меня пользоваться не получилось Жаль.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines