Несоответствие номера сборки: проблема с версией Sybase ASE - PullRequest
1 голос
/ 11 ноября 2010

У меня есть консольное приложение C #, которое ссылается на Sybase.Data.AseClient.

  • dev машина имеет версию 1.15.325 dll
  • UAT имеет версию 1.12.XYXZ
  • Prod имеет версию 1.15.115

Я получаю следующее исключение на машине, аналогичной prod


ОШИБКА 2010-11-11 18: 18: 23 562 15546ms FxSpotRateServer Main - Ошибка System.TypeInitializationException: инициализатор типа для 'Sybase.Data.AseClient.AseConnection' вызвал исключение. ---> Sybase.Data.AseClient.AseException: несоответствие номера сборки - sybdrvado115a.dll. Ожидается, что номер сборки будет больше или равен «325». Загружен сборка № 152. в Sybase.Data.AseClient.AseConnection.CheckVersion () в Sybase.Data.AseClient.AseConnection..cctor () --- Конец внутренней трассировки стека исключений --- в Sybase.Data.AseClient.AseConnection..ctor (String connectionString) в Applicationname.ClassName.GetAseConnectionString (String connectionString) в --------------------------------------- -------------------------------------------------- -

Я думаю о том, чтобы настроить привязку времени выполнения в моем app.config и выполнить это перенаправление во время выполнения.

Существуют ли другие способы / шаблоны для динамического подключения этих версий?
Мой подход чист и предложен?

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

Это не проблема, которую можно исправить с помощью файла .config. Он находит старую версию неуправляемого кода, который на самом деле делает тяжелую работу. Имя в сообщении об ошибке, sybdrvado115a.dll. Я бы сначала посмотрел в c: \ windows \ system32.

Вам необходимо обновить поставщика Sybase на этом компьютере, чтобы обойти это исключение. Или найдите где-нибудь старую версию управляемой оболочки. Обновление и обновление всех машин, безусловно, является лучшим решением.

1 голос
/ 11 ноября 2010

По умолчанию .NET привязывается к версии сборки, с которой она была построена, при условии, что она была протестирована с этой версией. Добавляя конфигурацию привязки во время выполнения, вы сообщаете .NET, что вы убедились, что все работает с альтернативными версиями. Вы в основном сказали .NET: «Поверь мне. Я знаю, что делаю». Это звучит как наиболее разумный подход к вашей ситуации. (Существуют более сложные ситуации, когда вы можете динамически загружать библиотеки DLL в коде без учета версии сборки, но это больше для плагинов или других ситуаций, когда вы не знаете сборку заранее.)

0 голосов
/ 12 ноября 2010

Я решил сделать машину DEV такой же, как и UAT, тем самым понизив версию Sybase Provider, установленную на машине DEV.UAT и PROD сделаны одинаково системными людьми.Я думаю, что это лучше, чем загрузка сборок во время выполнения, поскольку у нас будет прозрачная среда DEV, где люди будут использовать только те функции, которые они могут запускать в UAT и PROD.Несмотря на то, что я ничего не делал, чего нельзя было добиться с более низкими версиями провайдеров Sybase, безопасно иметь все согласованные среды.

Спасибо всем.

...