Сбой загрузки сервера SQL Server

Я пытаюсь развернуть 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)\Reference Сборки \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. Target Framework -.NET 4.

Любые идеи/решения?

Ответ 1

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

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

Ответ 2

В соответствии с документацией на любую сборку .NET можно ссылаться, но каждая зависимая сборка также должна быть зарегистрирована в базе данных (видна в "Программируемости - сборках" node в диспетчере SQL Server). После того, как база данных SQL Server будет иметь зависимые сборки, они будут присутствовать в окне "Добавить ссылку" в Visual Studio.

Ниже приведен код SQL ниже. Мне понадобилась сборка System.Web.dll(вам нужна правильная версия, мой SQL Server SQL Server 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 сборки, которые находятся в другой папке.

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