Side-by-side загрузка
От: Andrusha  
Дата: 26.12.14 13:57
Оценка:
День добрый всем,

Вопрос про side-by-side.

Есть такая вот констурукция:
.exe -> 1.dll -> 2.dll

.exe загружает сборку вот таким способом:
Assembly ass = Assembly.LoadFrom("C:\\1.dll");


Далее, по идее, в манифесте 1.dll прописана зависимость от 2.dll. Примерно вот таким способом:
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32"
                        name="2"
                        version="1.0.0.0"
                        publicKeyToken="0000000000000000"
      />
    </dependentAssembly>
  </dependency>

Проблема в том, что если верить sxstrace.exe, то никаких попыток загрузить 2.dll даже не происходит. А вот если добавить этот же кусок манифеста в .exe, то всё загружается. Но .exe "вражеский", поэтому такой вариант решения не подходит.

Собственно вопросов два: почему? И что делать?

Спасибо.
Re: Side-by-side загрузка
От: breee breee  
Дата: 26.12.14 14:01
Оценка:
Здравствуйте, Andrusha, Вы писали:

A>Собственно вопросов два: почему? И что делать?


A>Спасибо.


Почему не подходит? Манифест ведь можно отдельным файлом рядом с exe положить.
Re[2]: Side-by-side загрузка
От: Andrusha  
Дата: 26.12.14 14:06
Оценка:
Здравствуйте, breee breee, Вы писали:

A>>Собственно вопросов два: почему? И что делать?


BB>Почему не подходит? Манифест ведь можно отдельным файлом рядом с exe положить.


В моём случае .exe — это acad.exe, а 1.dll это плагин для него. Не хочется что-нибудь пользователю поломать, да и сам AutoCAD может что-то там в своём манифесте менять и перезаписывать его. Наверное. Поэтому, этот способ мне видится несколько не надёжным. Да и, насколько я понимаю, должно же без этого работать. Но не работает почему-то.
Re[3]: Side-by-side загрузка
От: breee breee  
Дата: 26.12.14 15:29
Оценка:
Здравствуйте, Andrusha, Вы писали:

A>В моём случае .exe — это acad.exe, а 1.dll это плагин для него. Не хочется что-нибудь пользователю поломать, да и сам AutoCAD может что-то там в своём манифесте менять и перезаписывать его. Наверное. Поэтому, этот способ мне видится несколько не надёжным. Да и, насколько я понимаю, должно же без этого работать. Но не работает почему-то.


Ну, тогда, возможно, Activation Context API поможет. Там можно указать путь до манифеста.
Re: Side-by-side загрузка
От: Sergey J. A. Беларусь  
Дата: 05.01.15 20:42
Оценка: 1 (1) +1
Здравствуйте, Andrusha, Вы писали:

Возможно эта статья поможет.

A>Собственно вопросов два: почему?

Сборки загруженные с помощью LoadFrom имеют особые правила по резолву своих зависимостей.

A>И что делать?

Можно попробовать положить обе сборки в директорию к exe файлу. Или обработать AppDomain.AssemblyResolve
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.