Создайте хранимую процедуру CLR, используя DLL, созданную .NET Framework 4.0 в SQL Server 2008. Появляется ошибка

Я использую приведенный ниже код для создания хранимой процедуры CLR. Пока я создаю сборку. это показывает ниже проблему. Моя целевая структура - 4.0. sql server - 2008 r2

Код SQL:

create assembly SampleSearch from 'E:\CLR Files\Sample\ElasticSearch.dll'

сообщение об ошибке:

CREATE ASSEMBLY для сборки "ElasticSearch" потерпел неудачу, потому что сборка построена для неподдерживаемой версии Common Language Время выполнения.

Ответы

Ответ 1

Microsoft SQL Server не допускает CLR смешанного режима. Смысл, он статически связан с конкретной версией CLR (это не то же самое, что .NET Framework, что большинство людей путают его). SQL Server 2005, 2008 и 2008 R2 связаны с CLR версии 2.0, которая обрабатывает версии 2.0, 3.0 и 3.5.NET Framework, в то время как SQL Server 2012 и 2014 связаны с CLR версии 4.0, которая обрабатывает версии .NET Framework 4.0, 4.5. x, 4.6.x и т.д.

Вы можете:

  • Перекомпилируйте, используя нижнюю версию рамки, но если вы используете функциональные возможности, запущенные в .NET Framework версии 4.0 или выше, это не сработает. Использование .NET Framework 2.0 всегда является самой безопасной ставкой для SQL Server 2005 - 2008 R2. Если вам нужно использовать .NET Framework 3.0 или 3.5 для функциональности, которая не находится в версии 2.0 (а не в списке поддерживаемых библиотек .NET Framework), вам также необходимо будет зарегистрировать соответствующую библиотеку .NET Framework 3.0/3.5 в SQL Server как UNSAFE, и для этого требуется установить параметр базы данных для TRUSTWORTHY в ON (который лучше всего оставить как OFF, если это вообще возможно).
  • Перейдите на SQL Server 2012, 2014 или 2016.

Более подробную информацию по теме ньюансов .NET в SQL Server (например, SQLCLR) см. в следующей статье, которую я написал в SQL Server Central, если не всю серию:

Stairway to SQLCLR Уровень 5: Разработка (использование .NET в SQL Server) (бесплатная регистрация требуется на этом сайте)

Ответ 3

Установите целевую структуру в 2.0 и затем повторите попытку.