2011-07-05 42 views
12

Estoy intentando implementar un CLR TVF (función de valor de tabla). En el código estoy usando JavaScriptSerializer para analizar una cadena JSON, así que hago referencia a la DLL de System.Web.Extensions y mis problemas comienzan allí.Sql Servidor CLR carga ensamblado falló

Proyecto construye muy bien, pero cuando trato de registrar la DLL recibo el siguiente error:

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.

que hace referencia System.Web.Extensions de:

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

puedo fijar la carga copia para copiar el ensamblaje en forma verdadera o manual, pero luego los errores de referencia son más profundos:

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 todo funciona bien hasta que haga referencia a Web.Extensions.dll. Target Framework es .NET 4.

¿Alguna idea/solución?

+0

¿Está .Net 4 Framework instalado en el equipo de SQL Server? –

+0

sí, como he dicho, todo funciona bien cuando no se hace referencia a System.Web.Extensions.dll. – Klark

Respuesta

3

Lamentablemente la integración de .NET Framework CLR con SQL Server 2005/2008 es solo un subconjunto limitado del framework y System.Web.Extensions no parece ser un ensamblado/espacio de nombres compatible.

Para una lista completa de los conjuntos soportados visita MSDN: http://msdn.microsoft.com/en-us/library/ms403279.aspx

+0

Realmente triste. Gracias, encontré un analizador diferente para JSON, así que resolvió el problema. – Klark

+0

Fuera de interés, ¿cuál fue el analizador, fue Json.Net? – Kane

+0

no, utilicé JavaScriptSerializer de System.Web.Extensions.dll. – Klark

14

según la documentación, cualquier conjunto de .NET puede hacer referencia pero cada conjunto dependiente también debe estar registrado en la base de datos (visible en la "Programmability - Ensambles "nodo en el Administrador del Servidor SQL). Una vez que la base de datos del servidor SQL tenga los ensamblados dependientes disponibles, estarán presentes en la ventana Agregar cuadro de diálogo de referencia en Visual Studio.

Este código SQL a continuación funciona. Hubiera necesitado ensamblado System.Web.dll (se necesita la versión correcta de mi SQL 2005 es de 64 bits)

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

El sistema intentará registrarse automáticamente ensamblados dependientes, pero sólo puede hacerlo desde el mismo directorio que el archivo que está intentando registrar En mi caso también registraron las siguientes ensamblados en la base de datos para System.Web funcione correctamente ...

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 

Mi sistema está utilizando 3.5 Marco, de manera que no puedo probar la importación System.Web.Extensions.dll para usted pero puede requerir el registro de otros ensamblajes de otra carpeta, y dado que es un ensamblado 4.0, puede estar haciendo referencia a algunos ensamblados 2.0 o 3.5 que se encuentran en una carpeta diferente.

Sospecho que terminará con una lista bastante grande de conjuntos importados para que funcione, pero definitivamente es posible hacerlo. La operación probablemente se puede hacer más fácilmente al tener una carpeta con todos los dlls dependientes y registrarse desde allí.

Cuestiones relacionadas