SQLCLR использует неправильную версию .NET Framework - PullRequest
24 голосов
/ 06 мая 2010

Во время недавнего перезапуска нашего сервера разработки SQL Server начал использовать .NET 4.0 для SQLCLR. Это означает, что ничто, использующее CLR в SQL, не работает, или, по крайней мере, я так понимаю, прочитав следующие источники:

http://software.intel.com/en-us/blogs/2009/10/16/sql-server-2008-sqlclr-net-framework-version/

www.sqlskills.com / БЛОГИ / Bobb / запись / On-SQL-Server-и-NET-40.aspx

Все, что мы получаем, это сообщения об ошибках этого типа:

Сообщение 6517, уровень 16, состояние 1, строка 1 Не удалось создать домен приложения "Xxx.dbo [DDL] 0,3". Подпись типа метода не совместима с Interop.

Запуск утверждения (как предложено @ john-christensen)

select * from sys.dm_clr_properties

приводит к следующей информации:

*Name*      *Value*
directory   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version     v4.0.30319
state       CLR is initialized

Кто-нибудь знает, как решить эту проблему или как мы можем заставить SQL Server CLR использовать более раннюю версию Framework?

Ответы [ 6 ]

14 голосов
/ 29 июня 2010

У меня возникла такая же досадная проблема. Ни один из элементов географии / геометрии в моей базе данных не работал. Мне потребовалось несколько неудачных переустановок SQL-сервера, чтобы наконец (несколько недель спустя!) Найти следующий ключ в моем реестре равным '1'

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ OnlyUseLatestCLR

когда я сбросил его на «0» и перезагрузил машину, все снова заработало!

Hans

12 голосов
/ 06 мая 2010

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

Таким образом, вы можете попробовать создать sqlservr.exe.config в папке \Binn в корневом пути экземпляра SQL и указать там, что вы хотите использовать только версии .NET до 3.5. Проверьте эту ссылку MSDN на структуру файла конфигурации.

8 голосов
/ 06 мая 2010

Из статьи и моего исследования в Интернете кажется, что может происходить обратное - возможно, вы регистрируете DLL 4.0? Похоже, что SQL Server 2008 всегда будет загружать 2.0 CLR, а не 4.0 CLR. Попробуйте выполнить этот оператор, он скажет вам, какая версия вашего сервера SQL работает:

выберите * из sys.dm_clr_properties

7 голосов
/ 06 мая 2010

В вашем посте в Intel, на который вы ссылаетесь, если вы внимательно его прочитаете, в нем говорится:

SQL Server 2008 и готовящийся к выпуску Выпуск SQL Server 2008 R2, ранее под кодовым названием "Килиманджаро", будет оба продолжать загружать последнюю версию сервиса выпуск версии 2.0 CLR .

И позже:

Пока будущие версии SQL Server может загрузить более новые версии CLR, или даже поддерживать загрузку нескольких CLR в процессе, версия 2.0 CLR здесь, чтобы остаться для SQLCLR в SQL Server 2008 и SQL Server 2008 R2.

Я не знаю, как вам удается загрузить что-то вроде .NET 4 в SQL Server 2008 R2 ....

1 голос
/ 06 мая 2010

Они сделали явный выбор, чтобы гарантировать, что установка .NET 4.0 будет безрезультатной. Он не должен использовать .NET 4.0 или какие-либо новые файлы, кроме новых shim-файлов, mscoree.dll и mscoreei.dll. Они должны быть обратно совместимы с версией 2.0. Вы можете запустить Process Explorer, чтобы увидеть номера версий загруженной библиотеки DLL, чтобы убедиться, что она работает в нужное время выполнения.

0 голосов
/ 18 марта 2015

У меня была эта проблема в течение дня, и после обновления моих окон и .NET Framework проблема исчезла. Проблема связана с .Net Framework, пытаемся ее исправить.

...