Подтвердить что ты не робот

SQLCLR с использованием неправильной версии .NET Framework

Во время недавнего перезапуска нашего сервера разработки 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/BLOGS/BOBB/post/On-SQL-Server-and-NET-40.aspx

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

Msg 6517, уровень 16, состояние 1, строка 1 Не удалось создать AppDomain "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?

4b9b3361

Ответ 1

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

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

Ответ 2

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \.NETFramework\OnlyUseLatestCLR

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

Ганс

Ответ 3

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

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

Ответ 4

В своем сообщении в 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....

Ответ 5

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

Ответ 6

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