Сборка загрузки CLR Sql Server не удалась - PullRequest
12 голосов
/ 05 июля 2011

Я пытаюсь развернуть CLR TVF (функция табличного значения). В коде я использую JavaScriptSerializer для анализа какой-либо строки JSON, поэтому я ссылаюсь на dll System.Web.Extensions, и мои проблемы начинаются там.

Проект строится нормально, но когда я пытаюсь зарегистрировать dll, я получаю следующую ошибку:

Ссылки сборки my_assembly_name сборка 'system.web.extensions, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35. ', которого нет в текущем база данных. SQL Server попытался найти и автоматически загрузить ссылка на сборку из того же место, куда пришла ссылающаяся сборка от, но эта операция не удалась (причина: 2 (Система не может найти указанный файл.)). Пожалуйста, загрузите ссылка на сборку в текущий базы данных и повторите запрос.

Я ссылаюсь на system.web.extensions от:

C: \ Program Files (x86) \ Ссылка Сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Web.Extensions.dll

Я могу установить копирование нагрузки на true или вручную скопировать сборку, но затем ссылки на ошибки будут еще глубже -

Ссылки сборки my_assembly_name сборка «System.servicemodel.activation, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35. ', которого нет в текущем база данных. SQL Server попытался найти и автоматически загрузить ссылка на сборку из того же место, куда пришла ссылающаяся сборка от, но эта операция не удалась (причина: 2 (Система не может найти указанный файл.)). Пожалуйста, загрузите ссылка на сборку в текущий базы данных и повторите запрос.

Все работает нормально, пока я не ссылаюсь на Web.Extensions.dll. Целевой фреймворк .NET 4.

Есть идеи / решения?

Ответы [ 2 ]

15 голосов
/ 31 мая 2012

Согласно документации, на любую сборку .NET можно ссылаться, но каждая зависимая сборка также должна быть зарегистрирована в базе данных (отображается в узле «Программируемость - сборки» в SQL Server Manager).Как только в базе данных SQL Server появятся зависимые сборки, они появятся в диалоговом окне «Добавить ссылку» в Visual Studio.

Этот код SQL ниже работает.Мне нужна была сборка System.Web.dll (вам нужна правильная версия, мой 2005 SQL - 64-битный)

CREATE ASSEMBLY [System.Web] AUTHORIZATION dbo 
FROM 'c:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\System.web.dll'
WITH PERMISSION_SET = UNSAFE 

Система попытается автоматически зарегистрировать зависимые сборки, но может делать это только из одного каталогакак файл, который вы пытаетесь зарегистрировать.В моем случае он также зарегистрировал следующие сборки в базе данных для правильной работы System.Web ...

System.Configuration.Install    
System.Design   
System.DirectoryServices    
System.DirectoryServices.Protocols  
System.Drawing  
System.Drawing.Design   
System.EnterpriseServices   
System.Runtime.Remoting 
System.Runtime.Serialization.Formatters.Soap    
System.ServiceProcess   
System.Web.RegularExpressions   
System.Windows.Forms

Моя система использует 3.5 Framework, поэтому я не могу проверить импорт System.Web.Extensions.dll дляно для регистрации могут потребоваться другие сборки из другой папки, и, поскольку это сборка 4.0, она может ссылаться на некоторые сборки 2.0 или 3.5, находящиеся в другой папке.

Я подозреваю, что в итоге вы получитедовольно большой список импортированных сборок, чтобы заставить его работать, но это определенно возможно сделать.Эту операцию, вероятно, можно выполнить проще, если иметь одну папку со всеми зависимыми библиотеками в ней и зарегистрироваться оттуда.

3 голосов
/ 05 июля 2011

К сожалению, интеграция .NET Framework CLR с SQL Server 2005/2008 является лишь ограниченным подмножеством платформы, и System.Web.Extensions не представляется поддерживаемой сборкой / пространством имен.

Полный список поддерживаемых сборок приведен в MSDN: http://msdn.microsoft.com/en-us/library/ms403279.aspx

...