Разные версии dll в GAC
От: yg  
Дата: 24.02.09 11:24
Оценка:
На компьютере клиента в GAC может быть установлена либо версия 1.0 либо 2.0 некоторой библиотеки. Либо и та версия, и другая. Публичный ключ используется один и тот же.
Если использовать статическое указание ссылки на сборку в References проекта, то будет программа будет всегда требовать библиотеку определенной версии.
Если использовать Assembly.Load, то это страшный гемморой.
Можно ли в конфигурационном файле указать, что грузить одну из двух версий библиотек из GAC, но предпочтение отдавать определенной?
Re: Разные версии dll в GAC
От: vmpire Россия  
Дата: 24.02.09 11:43
Оценка:
Здравствуйте, yg, Вы писали:

yg>Можно ли в конфигурационном файле указать, что грузить одну из двух версий библиотек из GAC, но предпочтение отдавать определенной?


Может, это поможет? http://msdn.microsoft.com/en-us/library/eftw1fys(VS.71).aspx
Там, правда, вроде, нельзя задавать приоритеты, но перенаправить на другую версию можно точно.
Re[2]: Разные версии dll в GAC
От: yg  
Дата: 24.02.09 12:27
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, yg, Вы писали:


yg>>Можно ли в конфигурационном файле указать, что грузить одну из двух версий библиотек из GAC, но предпочтение отдавать определенной?


V>Может, это поможет? http://msdn.microsoft.com/en-us/library/eftw1fys(VS.71).aspx

V>Там, правда, вроде, нельзя задавать приоритеты, но перенаправить на другую версию можно точно.

Как я понимаю, bindingRedirect используется, когда известно, что на компьютере установлена определенная версия dll, и все запросы приложения к разным версиям dll перенаправляется на эту конкретную версию.
У меня же ситуация обратная. Я не знаю, какая версия у клиента, но хочу перенаправить обращение к версии 1 к той версии, которая установлена у клиента.
Re[3]: Разные версии dll в GAC
От: vmpire Россия  
Дата: 24.02.09 12:40
Оценка:
Здравствуйте, yg, Вы писали:

yg>Как я понимаю, bindingRedirect используется, когда известно, что на компьютере установлена определенная версия dll, и все запросы приложения к разным версиям dll перенаправляется на эту конкретную версию.

yg>У меня же ситуация обратная. Я не знаю, какая версия у клиента, но хочу перенаправить обращение к версии 1 к той версии, которая установлена у клиента.

Да, так и есть.
Могу предложить инсталлятором проверять и вписывать строчки в конфиг, других идей нет.
Хотя, интересно, как поведёт себя bindingRedirect если ссылка стоит на версию 1, редирект на версию 2, а реально на машине есть только версия 1.
Скорее всего, он обвалится. А если не обвалится — то это то, что Вам нужно.
Re[3]: Разные версии dll в GAC
От: stump http://stump-workshop.blogspot.com/
Дата: 24.02.09 18:56
Оценка:
Здравствуйте, yg, Вы писали:

yg>Как я понимаю, bindingRedirect используется, когда известно, что на компьютере установлена определенная версия dll, и все запросы приложения к разным версиям dll перенаправляется на эту конкретную версию.

yg>У меня же ситуация обратная. Я не знаю, какая версия у клиента, но хочу перенаправить обращение к версии 1 к той версии, которая установлена у клиента.

Если сборки в GAC-е твои, можешь снабдить их Publisher Policy где будет указано на какую из версий редиректить биндинг.
How to: Create a Publisher Policy
Понедельник начинается в субботу
Re[4]: Разные версии dll в GAC
От: yg  
Дата: 25.02.09 10:50
Оценка:
Здравствуйте, stump, Вы писали:

S>Если сборки в GAC-е твои, можешь снабдить их Publisher Policy где будет указано на какую из версий редиректить биндинг.

Нет, не мои.
Нужно обеспечить совместимость с библиотеками Microsoft.TeamFoundation.Client.dll версий 2005 (8.0.0.0) и 2009 (9.0.0.0).
Структура используемых классов одинакова. Проект компилируется с любой из этих версий.
Нужно использовать любую из установленных, но предпочтение отдавать самой свежей.
Но как это сделать — пока неизвестно..
Re[3]: Разные версии dll в GAC
От: Аноним  
Дата: 25.02.09 11:39
Оценка:
Здравствуйте, yg, Вы писали:

yg>Как я понимаю, bindingRedirect используется, когда известно, что на компьютере установлена определенная версия dll, и все запросы приложения к разным версиям dll перенаправляется на эту конкретную версию.

yg>У меня же ситуация обратная. Я не знаю, какая версия у клиента, но хочу перенаправить обращение к версии 1 к той версии, которая установлена у клиента.

bindingRedirect позволяет указать перенаправление на несколько версий (т.е. несколько записей bindingRedirect ), но предпочтение какой версии он отдаст не понятно, т.е. если доступны обе версии, что он выберет, ту на которую ссылается ваша сборка, или более новую, на которую есть bindingRedirect , не проверял, ну а вам САМ велел проверить, заодно и нам расскажите
Re[4]: Разные версии dll в GAC
От: SergioR Российская Империя  
Дата: 25.02.09 11:56
Оценка:
Вариант 1) Тащить с собой последнюю версию 9.0.0.0 и все зависимые ассембли (приватные).
Вариант 2) Создать два конфиг файла myApp.2005.config myApp.2008.config, в коде приложения определить установленную версию SDK и скопировать один из них в myApp.exe.config, перезапустить приложение.

Но 1-й вариант более кошерный и в общем случае не потребует установки SDK, только инсталяшка распухнет немного.
Re[5]: Разные версии dll в GAC
От: Аноним  
Дата: 25.02.09 12:10
Оценка:
Здравствуйте, SergioR, Вы писали:

SR>Вариант 1) Тащить с собой последнюю версию 9.0.0.0 и все зависимые ассембли (приватные).


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

SR>Вариант 2) Создать два конфиг файла myApp.2005.config myApp.2008.config, в коде приложения определить установленную версию SDK и скопировать один из них в myApp.exe.config, перезапустить приложение.


это все хаки, надо найти правильный путь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.