SQL CLR - миграция с 2008 R2 на 2012.

У меня есть несколько сборок SQL CLR на SQL 2008 R2. Эти сборки предназначались для.Net Framework 3.5. Учитывая, что SQL 2008 поддерживает версию 2.0 .NET Framework, я предполагаю, что SQL загрузил безопасные сборки из System GAC и ожидал, что небезопасные сборки будут установлены в SQL. Мои ссылки на эти небезопасные сборки:.NET версия 2.0. Теперь, когда я восстановил эту базу данных в SQL 2012, мой код CLR завершается с ошибкой "ссылка на небезопасную версию 4.0 сборки не найдена". Я не понял эту ошибку. Версия 2.0 небезопасной сборки системы существует в самом файле mdf БД. Почему SQL ищет 4.0? Я думаю, что мне не хватает того, что означает "SQL поддерживает x версию.NET Framework".

1 ответ

Решение

Мне удалось выяснить причину проблемы, с которой я столкнулся. SQL 2012 поддерживает.NET Framework версии 4.0 для SQLCLR и, следовательно, загружает все сборки платформы из 4.0 платформы. Следовательно, мне нужно было обновить все мои сборки, чтобы использовать сборки фреймворка 4.0. http://blogs.msdn.com/b/dohollan/archive/2012/04/20/sql-server-2012-sqlclr-net-framework-version.aspx?CommentPosted=true

Но у меня не получилось даже после этого. Оказывается, в 4.0.NET изменил некоторые сборки фреймворка, такие как System.ServiceModel, с чистых сборок.Net на сборки в смешанном режиме. Такие сборки не могут быть загружены SQL CLR. Таким образом, все пользовательские сборки, зависящие от сборок в смешанном режиме до 2012 года, больше не будут работать в 2012 году:(Наиболее сильно пострадали ранее работающие интеграции SQL и WCF, полностью ломающиеся в 2012 году. WCF зависит от ServiceModel. Подробнее здесь http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

В итоге мы написали простую оболочку Webservice для нашей операции WCF и написали клиент Webservice в SQLCLR.

Другие вопросы по тегам