Примечание. Использование Assembly.Load непосредственно в обработчике события AssemblyResolve не является хорошей идеей, так как в случае сбоя загрузки он рекурсивно вызывает обработчик события.

у. NET инструмент, который требует библиотеки SQL Server SMO. Мне все равно, если это версия с Server 2005 (9.0), 2008 (10.0) или 2008 R2 (вероятно, 10.5, не проверял). Библиотека SMO устанавливается вместе с SQL Server, поэтому я могу с уверенностью предположить, что в любой системе с установленным SQL Server также доступна некоторая версия библиотеки SMO.

К сожалению, библиотеки SMO ​​имеют строгое название: если я добавлю ссылку на SMO 9.0 в моем проекте, она потерпит неудачу (FileNotFoundException) если в системе клиента присутствует только SMO 10.0, и наоборот.

Есть ли способ сказать компилятору, чтоЛюбые версия библиотеки мне подойдет? Или мне действительно нужно распространять 3 идентичные версии моего инструмента, каждая из которых скомпилирована в свою версию SMO?

Отказ от ответственности: я знаю, что библиотеки SMO ​​(и библиотеки, необходимые для библиотек SMO) могут быть перераспределены. Но есть большая разница между (а) одним тонким автономным EXE-файлом размером 100 КБ и (б) полнофункциональным установочным пакетом, который устанавливает целую кучу предварительных условий.

Отказ от ответственности 2: мне известны следующие дубликаты:

c # - вы можете сделать «слабую» ссылку на сборку со строгой именованной сборкойНужна сборка C #, чтобы свободно ссылаться на строго названную сборку

Однако предоставленные решения не подходят. В вопросе 1 разработчик контролирует библиотеку DLL, на которую ссылаются (а я нет); в вопросе 2 разработчик контролирует целевые системы (чего я тоже не имею).

Ответы на вопрос(3)

Ваш ответ на вопрос