Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   совместное использование сборок разных версий (http://forum.oszone.net/showthread.php?t=234453)

Surround 11-05-2012 18:11 1914136

совместное использование сборок разных версий
 
Здравствуйте! Возникла тут такая нетривиальная задачка с конвертированием версий хранения данных, скажем так.
Есть две сборки: одна имеет версию v1, другая - v2. Каждая из них работает с данным в формате f1 и f2, соответственно. То есть при помощи f1 получаются данные в промежуточный результат и он записывается куда-то там через f2.
Суть в том, что пространства имен у v1 и v2 - одинаковы. Отличается только версия сборки и код некоторых методов (для работы с данными эволюционировавших форматов). В остальном все одинаково. Пытался обойти неоднозначность следующим образом: во-первых, переименовал dll-ки (чтобы подключить к проекту по ссылкам и одну, и другую). Для первой в свойствах в студии указал псевдоним alias1, для второй - alias2 (по умолчанию у всех был же global).
Далее в коде:
Код:

extern alias alias1;
extern alias alias2;
using namespace1 = alias1::ПростанствоИмен.Подпространство;
using namespace2 = alias2::ПростанствоИмен.Подпространство;

namespace1::Класс varible1 = namespace1::Класс.Метод(); //вроде прокатывает
namespace2::Класс varible2 = namespace2::Класс.Метод(); //пишет, что Неявное преобразование типа из сборки1 (та, которая alias1) недопустимо в тип из сборки2(alias2). Как?!

(ПростанствоИмен.Подпространство) и (Класс.Метод) - одинаковы в обоих случаях, просто вызываются из различных сборок

в Warning-ах пишут:
Цитата:

Не удается решить конфликт между "ПростанствоИмен.Подпространство, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7148afe997f90519" и "ПростанствоИмен.Подпространство, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7148afe997f90519". Произвольный выбор "ПростанствоИмен.Подпространство, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7148afe997f90519".
В принципе, суть ошибки становится понятна - среда выбирает по умолчанию более позднюю версию, но игнорирует алиасы. Вернее, слева от присваивания игнорирует, справа - нет.


Пробовал комментить все, что касается alias1 и namespace1, все равно та же ошибка для alias2 и namespace2
Лабал MSDN на эту тему, решения не нашел. Прошу совета :) Спасибо!


Время: 18:50.

Время: 18:50.
© OSzone.net 2001-