VS2005 Настройка "резервной" DLL - PullRequest
3 голосов
/ 30 декабря 2008

Я пытаюсь добавить поддержку SQL2008 в приложение .NET 2.0. Однако мое уникальное утверждение заключается в том, что некоторые пользователи все еще будут использовать SQL2005, и я не хочу требовать от них установки клиентских компонентов SQL2008.

Фактический набор DLL, которые мне нужны для SQL2008, отличается от SQL2005. Код может остаться прежним.

Внизу, мне нужен способ в VS2005 (или ручное редактирование файла сборки), чтобы сказать:

Если у пользователя есть DLL_1 v2, DLL_2 v2 и DLL_3 v2, используйте их. Если нет, используйте DLL_1 v1 и DLL_2 v1.


Я рассмотрю использование отражения для загрузки библиотек DLL. Похоже, для меня это единственный вариант, кроме требования клиентских компонентов SQL 2008.

Что касается перераспределения библиотек DLL, я прочитал лицензию. Там есть пара сомнительных терминов, которые применимы к нам (например, для размещенного программного обеспечения). Кроме того, это еще более сложная проблема, потому что данные наших клиентов очень чувствительны, поэтому они проходят обширные процессы утверждения, чтобы разрешить установку чего-либо, например, DLL, которые мы включаем.

Спасибо за помощь!


Спасибо за идеи! Однако мы все еще не совсем там ...

  1. Нет, пользователь не выбирает, какую версию БД он устанавливает. Предполагается разрешить SQL2005 и / или SQL2008 даже в одной и той же установке. Например, у нас есть приложение администрирования, которое позволяет пользователям управлять экземплярами базы данных на разных серверах SQL.

  2. Я понимаю, что мы могли бы добавить диалоговое окно, чтобы выбрать, нужна ли поддержка SQL2008. Однако это расширило бы нашу тестовую матрицу, чего мы и стараемся избегать.

  3. Я считаю, что мне нужно напрямую ссылаться на DLL. Я делаю гораздо больше с базами данных, чем просто подключаюсь и запрашиваю.

Мне нужны следующие DLL:

  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc
  • Microsoft.SqlServer.Smo
  • Microsoft.SqlServer.SmoExtended
  • Microsoft.SqlServer.SqlEnum

Есть еще идеи, мысли?

Ответы [ 6 ]

1 голос
/ 02 января 2009

Отражение позволит вам динамически загружать набор DLL, который вы хотите во время выполнения. Таким образом, вы можете обнаружить то, что доступно и загрузить его тогда.

Единственным недостатком является то, что использование Reflection может сделать вашу работу немного более сложной и трудоемкой.

0 голосов
/ 03 января 2009

Вы можете использовать служебный контейнер и связать зависимости в вашем файле конфигурации. Это, вероятно, повлечет за собой разделение кода, который зависит от любого набора сборок, на отдельные классы и сборки.

Т.е.. две библиотеки классов, одна для 2005 и одна для 2008, каждая из которых содержит набор классов, реализующих набор общих интерфейсов. Затем приложение просто запросит у контейнера службы объект, который реализует один из общих интерфейсов, а файл конфигурации приложения определит, какая реализация будет использоваться.

Эту настройку можно, конечно, также выполнить в коде при запуске приложения.

Этот подход также позволит вам сделать больше, чем просто использовать другой набор DLL. Если в 2005 году некоторые вещи нужно сделать по-другому, чем в 2008 году, вы можете реализовать эти различия в своих библиотеках классов, и приложение не будет мудрым.

0 голосов
/ 31 декабря 2008

Пользователь выбирает, какую версию БД он устанавливает? (Я предполагаю, что есть какой-то процесс установки). Можете ли вы поменять файлы DLL в папке bin при установке в зависимости от выбранной версии базы данных?

0 голосов
/ 31 декабря 2008

Вам вообще не нужно делать прямую ссылку на какие-либо библиотеки DLL. Если вы используете System.Data.SqlClient для подключения к вашим БД, тогда .Net будет знать, как общаться с ними обоими. Если вы не используете System.Data.SqlClient для связи с вашими серверами, то возникает следующий вопрос: можете ли вы переключиться на это пространство имен для связи с БД.

Это может быть немного за пределами того, что вы хотите сделать, но вы можете создать абстракцию уровня обслуживания, где каждый подключается к уровню обслуживания, а уровень обслуживания управляет маршрутизацией и связью с серверами БД, а вы может связываться с сервисным уровнем через SOAP или .Net Remoting. Я начал переключать все свои приложения на этот метод, поскольку он позволяет мне сосредоточить свою бизнес-логику и абстракцию базы данных в одном контролируемом месте и работать с презентацией на локальном компьютере.

0 голосов
/ 31 декабря 2008

Если вы просто осуществляете базовый доступ к данным, вам не нужно беспокоиться об этом, либо собственный клиент должен работать нормально, и вы можете позволить фреймворку зацепиться за вас. Если вы укажете клиент SQL, .Net будет использовать тот, который сможет достать. Вы используете объекты SMO? В этом случае могут возникнуть проблемы с зависимостями.

0 голосов
/ 30 декабря 2008

Вы можете изменить строки подключения ваших табличных адаптеров в коде, поэтому было ли необходимо писать совершенно новые библиотеки для SQL2008?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...