Сбой загрузки сервера 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 и зарегистрируйтесь там.