2011-07-05 8 views
12

Tôi đang cố gắng triển khai TVR CLR (chức năng giá trị bảng). Trong mã tôi đang sử dụng JavaScriptSerializer để phân tích cú pháp một số chuỗi JSON, vì vậy tôi tham khảo dll System.Web.Extensions và các vấn đề của tôi bắt đầu ở đó.Lắp ráp tải Sql Server CLR không thành công

Dự án xây dựng tốt, nhưng khi tôi cố gắng đăng ký dll tôi nhận được lỗi sau:

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.

Tôi tham chiếu system.web.extensions từ:

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

tôi có thể thiết lập sao chép tải để sao chép đúng hoặc sao chép theo cách thủ công nhưng sau đó tham chiếu đến lỗi sâu hơn -

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 verything hoạt động tốt cho đến khi tôi tham khảo Web.Extensions.dll. Khung mục tiêu là .NET 4.

Bất kỳ ý tưởng/giải pháp nào?

+0

Khung .Net 4 có được cài đặt trên máy chủ SQL không? –

+0

yep, như tôi đã nói, mọi thứ hoạt động tốt khi System.Web.Extensions.dll không được tham chiếu. – Klark

Trả lời

3

Tích hợp đáng buồn của .NET Framework CLR với SQL Server 2005/2008 chỉ là một tập con giới hạn của khung công tác và System.Web.Extensions dường như không phải là vùng lắp ráp/không gian tên được hỗ trợ.

Đối với một danh sách đầy đủ của hội hỗ trợ kiểm tra MSDN: http://msdn.microsoft.com/en-us/library/ms403279.aspx

+0

Thật đáng buồn. Cảm ơn, tôi đã tìm thấy một trình phân tích cú pháp khác cho JSON để giải quyết vấn đề. – Klark

+0

Không quan tâm đến trình phân tích cú pháp, là Json.Net? – Kane

+0

không, tôi đã sử dụng JavaScriptSerializer từ System.Web.Extensions.dll. – Klark

14

Theo cách tài liệu, bất kỳ assembly .NET thể được tham chiếu nhưng mỗi lắp ráp phụ thuộc cũng phải được đăng ký tại cơ sở dữ liệu (có thể nhìn thấy trong "Khả năng lập trình - Assemblies "node trong SQL Server Manager). Khi cơ sở dữ liệu SQL Server có các assembly phụ thuộc, chúng sẽ có mặt trong cửa sổ Add Reference Dialog trong Visual Studio.

Mã SQL này bên dưới hoạt động. Tôi đã cần lắp ráp System.Web.dll (bạn cần đúng phiên bản 2005 SQL của tôi là 64 bit)

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

Hệ thống sẽ cố gắng để tự động đăng ký lắp ráp phụ thuộc nhưng chỉ có thể làm điều đó từ thư mục tương tự như tệp bạn đang cố gắng đăng ký. Trong trường hợp của tôi nó cũng đăng ký các hội đồng sau trong cơ sở dữ liệu cho System.Web để hoạt động một cách chính xác ...

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 

Hệ thống của tôi đang sử dụng 3,5 khung vì vậy tôi không thể kiểm tra nhập khẩu System.Web.Extensions.dll cho bạn nhưng nó có thể yêu cầu các assembly khác từ một thư mục khác để đăng ký, và vì nó là một assembly 4.0 nên nó có thể tham chiếu tới một số phiên bản 2.0 hoặc 3.5 nằm trong một thư mục khác.

Tôi nghi ngờ bạn sẽ kết thúc với một danh sách khá lớn các hội đồng được nhập khẩu để làm cho nó hoạt động nhưng chắc chắn là có thể làm được. Thao tác có thể được thực hiện dễ dàng hơn bằng cách có một thư mục với tất cả các dll phụ thuộc trong đó và đăng ký từ đó.