Как использовать разные версии внешних DLL?

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Всем привет. Можно ли подключать к проекту внешние dll не копируя их в папку ExternalAssemblies рабочей версии зенки, а подключать их используя папку проекта?

Зачем это нужно? Возьмем ситуацию, когда автор библиотеки в новой версии изменил какие либо методы. Один шаблон (одного автора) использует старую версию, а другой шаблон (другого автора) новую версию этой dll. При замене старой версии dll в папке ExternalAssemblies на новую, проекты использующие методы из старой версии начинают выдавать ошибки. Связаться с авторами, не всегда есть возможность, а шаблоны закрыты на редактирование.

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

Есть какой то приоритет по поиску и использованию dll? Например, подключенные dll проекта ищутся сначала в папке проекта, а потом уже в папке ExternalAssemblies рабочей версии зенки или эти dll ищутся только в ExternalAssemblies?

Можно как то без упаковки в проект использовать разные версии dll при необходимости? Ведь упаковка в проект не всегда удобна, а иногда просто невозможна и вызывает ошибки, и замена dll в нужной папке намного легче. Например System.Data.SQLite.dll использует обращение к SQLite.Interop.dll (версий х86 или х64) и в проект не получается ее добавить (она не на C#) и упаковка библиотек в проект не спасает.
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Можно ли подключать к проекту внешние dll не копируя их в папку ExternalAssemblies рабочей версии зенки, а подключать их используя папку проекта?
Явно указав в коде папку поиска dll:
C#:
AppDomain.CurrentDomain.AssemblyResolve += delegate
{
    return System.Reflection.Assembly.LoadFile(Directory.GetCurrentDirectory() + @"\ExternalAssemblies\System.Numerics.Vectors.dll");
    //return System.Reflection.Assembly.LoadFile(@"C:\путь к постеру\ExternalAssemblies\System.Numerics.Vectors.dll");
};
В .net при компиляции сборок, dll жёстко прописываются с текущей версией, поэтому придётся грузить dll через код и вероятно другим.
Есть какой то приоритет по поиску и использованию dll? Например, подключенные dll проекта ищутся сначала в папке проекта, а потом уже в папке ExternalAssemblies рабочей версии зенки или эти dll ищутся только в ExternalAssemblies?
Есть, пути так же можно посмотреть через код.
 
Последнее редактирование:
  • Спасибо
Реакции: radv

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Явно указав в коде папку поиска dll:
C#:
AppDomain.CurrentDomain.AssemblyResolve += delegate
{
    return System.Reflection.Assembly.LoadFile(Directory.GetCurrentDirectory() + @"\ExternalAssemblies\System.Numerics.Vectors.dll");
    //return System.Reflection.Assembly.LoadFile(@"C:\путь к постеру\ExternalAssemblies\System.Numerics.Vectors.dll");
};
а System.Numerics.Vectors.dll это для примера и вместо нее, надо указать пути к нужным либам?
Если несколько либ надо подключить, для каждой надо такой код прописать?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
  • Спасибо
Реакции: radv

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Явно указав в коде папку поиска dll:
А в каком месте нужно этот код ставить?
В общем коде на синтаксис ругается.
Можно где то прочитать подробнее про такое подключение библиотек?
 
  • Спасибо
Реакции: lbvf65

lbvf65

Client
Регистрация
20.08.2020
Сообщения
439
Благодарностей
114
Баллы
43
А в каком месте нужно этот код ставить?
В общем коде на синтаксис ругается.
Можно где то прочитать подробнее про такое подключение библиотек?
Подскажите как решили вопрос
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
  • Спасибо
Реакции: lbvf65

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)