SQLCLR, использующий неправильную версию .NET Framework
-
03-10-2019 - |
Вопрос
Во время недавнего перезапуска нашего сервера разработки 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
Все, что мы получаем, - это сообщения об ошибках такого типа:
Сообщение 6517, уровень 16, состояние 1, в строке 1 не удалось создать домен приложения "xxx.dbo[ddl].3".Сигнатура типа метода несовместима с взаимодействием.
Запуск инструкции (как предложил @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 использовать более раннюю версию фреймворка?
Решение
Как правило, вы можете заставить приложение .Net использовать определенную версию .NET Framework, указав supportedRuntime
Тег в файле конфигурации приложения.
Так что вы можете попробовать создать sqlservr.exe.config
в \Binn
Папка под корневым путем экземпляра SQL и укажите там, что вы хотите использовать только версии .NET до 3,5. Проверить Это сообщение MSDN Для структуры файла конфигурации.
Другие советы
Я столкнулся с той же досадной проблемой.Ни один материал по географии / геометрии в моей базе данных не работал.Мне потребовалось несколько неудачных переустановок SQL server, чтобы, наконец (несколько недель спустя!) Обнаружить, что следующему ключу в моем реестре присвоено значение "1"
HKEY_LOCAL_MACHINE\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Microsoft\.NetFramework\OnlyUseLatestCLR
когда я сбросил его на "0" и перезагрузил компьютер, все снова заработало!
Ганс
Из статьи и моего исследования в Интернете, похоже, что может происходить обратное - не могли бы вы потенциально регистрировать 4,0 DLL? Похоже, что SQL Server 2008 всегда будет загружать 2,0 CLR, а не 4,0 CLR. Попробуйте запустить это утверждение, он скажет вам, какая версия работает ваш SQL Server:
Выберите * от Sys.dm_clr_properties
В вашем посте на 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 ....
Они сделали явный выбор, чтобы убедиться, что установка .NET 4.0 будет неэффективным. Он не должен использоваться .NET 4.0 или любой из новых файлов, кроме новых файлов Chim, MScoree.dll и mscoreei.dll. Это должно быть обратно совместимым с временем выполнения 2.0. Вы можете запустить Explorer Process, чтобы увидеть номера версий загруженной DLL, чтобы убедиться, что она выполняется правильное время выполнения.
У меня была эта проблема на день и после обновления моих Windows и .NET Frameworks Frameworks исчезла. Проблема относится к .NET Framework. Попробуйте восстановить его.