2011-07-05 9 views
12

Próbuję wdrożyć CLR TVF (funkcja wartości tabeli). W kodzie używam JavaScriptSerializer do parsowania niektórych ciągów JSON, więc odwołuję się do biblioteki System.Web.Extensions i moje problemy zaczynają się w tym miejscu.Załadowanie modułu CLR serwera SQL nie powiodło się

Projekt buduje grzywny, ale gdy próbuję zarejestrować dll pojawia się następujący błąd:

Assembly 'my_assembly_name' references assembly 'system.web.extensions, version=4.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.

I odwołuje system.web.extensions od:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.Extensions.dll

mogę ustawić obciążenie kopiowania true lub ręcznie skopiować zespół, ale wtedy błędy odwoływania się głębiej -

Assembly 'my_assembly_name' references assembly 'system.servicemodel.activation, version=4.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.

E wszystko działa dobrze, dopóki nie odwołasz się do pliku Web.Extensions.dll. Docelowy framework to .NET 4.

Jakieś pomysły/rozwiązania?

+0

Czy .Net 4 Framework jest zainstalowany na komputerze z programem SQL Server? –

+0

Tak, jak powiedziałem, wszystko działa poprawnie, gdy nie jest odwoływany System.Web.Extensions.dll. – Klark

Odpowiedz

3

Niestety integracja środowiska .NET Framework CLR z programem SQL Server 2005/2008 jest tylko ograniczonym podzbiorem struktury, a rozszerzenie System.Web.Extensions nie jest obsługiwanym zbiorem/przestrzenią nazw.

aby uzyskać pełną listę obsługiwanych zestawów sprawdzić MSDN: http://msdn.microsoft.com/en-us/library/ms403279.aspx

+0

Naprawdę smutno. Dzięki, znalazłem inny analizator składni dla JSON, aby rozwiązać problem. – Klark

+0

Z ciekawości jaki był parser, czy był to Json.Net? – Kane

+0

nope, użyłem JavaScriptSerializer z System.Web.Extensions.dll. – Klark

14

Acording do dokumentacji, każdy zespół .NET można się odwoływać, ale każdy zespół musi być również zależne zarejestrowane w bazie danych (widoczny w „programowania - Assemblies "node w SQL Server Manager). Gdy baza danych SQL Server ma dostępne zestawy zależne, będą one obecne w oknie Dodaj okno dialogowe odniesienia w Visual Studio.

Ten kod SQL działa. Ja potrzebne zespół System.Web.dll (trzeba poprawną wersję mój 2005 SQL jest 64-bitowy)

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

System będzie próbował automatycznie rejestrować zespoły zależne, ale można to zrobić tylko z tego samego katalogu, co plik, który próbujesz zarejestrować. W moim przypadku to również zarejestrowany następujące zespoły w bazie danych dla system.Web działać poprawnie ...

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 

Mój system używa 3.5 Framework, więc nie mogę przetestować importowania System.Web.Extensions.dll dla Ciebie ale może wymagać rejestracji innych zespołów z innego folderu, a ponieważ jest zbiorem 4.0, może odwoływać się do niektórych zespołów 2.0 lub 3.5 znajdujących się w innym folderze.

Podejrzewam, że skończy się to raczej dużą listą zaimportowanych zestawów, aby uruchomić ją, ale jest to zdecydowanie możliwe. Operację można prawdopodobnie wykonać łatwiej, mając jeden folder z wszystkimi bibliotekami zależnymi i rejestrując się z niego.