2010-05-06 11 views
22

Durante un reciente reinicio de nuestro servidor de desarrollo, el SQL Server comenzó a usar .NET 4.0 para el SQLCLR. Esto significa que nada utilizando el CLR en las obras de SQL, o al menos esa es mi entendimiento mediante la lectura de estas fuentes:SQLCLR utilizando la versión incorrecta de .NET Framework

http://software.intel.com/en-us/blogs/2009/10/16/sql-server-2008-sqlclr-net-framework-version/

www.sqlskills.com/BLOGS/BOBB/post/On-SQL-Server-and-NET-40.aspx

Todo lo que tenemos son los mensajes de error de este tipo:

Msg 6517, nivel 16, estado 1, línea 1 Error al crear AppDomain "xxx.dbo [ddl] .3". La firma de tipo de método no es compatible con Interoperabilidad.

Ejecución de la declaración (según lo sugerido por @ John-Christensen)

select * from sys.dm_clr_properties 

resultados en la siguiente información:

*Name*  *Value* 
directory C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ 
version  v4.0.30319 
state  CLR is initialized 

¿Alguien sabe cómo resolver esto o cómo podemos forzar SQL Server CLR para usar una versión anterior del Framework?

Respuesta

12

Normalmente, puede forzar a una aplicación .NET a usar una versión específica de .NET Framework especificando la etiqueta supportedRuntime en el archivo de configuración de la aplicación.

Puede intentar crear un sqlservr.exe.config en la carpeta \Binn en la ruta raíz de la instancia de SQL y especificar allí que desea usar solo versiones .NET de hasta 3.5. Compruebe this MSDN link para ver la estructura del archivo de configuración.

1

Hicieron elecciones explícitas para garantizar que la instalación de .NET 4.0 no tuviera ningún impacto. No debería utilizar .NET 4.0 ni ninguno de los archivos nuevos, excepto los nuevos archivos shim, mscoree.dll y mscoreei.dll. Esos deberían ser compatibles con el tiempo de ejecución 2.0. Puede ejecutar Process Explorer para ver los números de versión de los dll cargados para verificar que esté ejecutando el tiempo de ejecución correcto.

8

Según el artículo y mi investigación en la web, parece que podría estar sucediendo lo contrario: ¿podría estar registrando una DLL 4.0? Parece que SQL Server 2008 siempre cargará el CLR 2.0 y no el 4.0 CLR. Pruebe a ejecutar esta declaración, se le dirá qué versión de su servidor SQL está en ejecución:

seleccionar * de sys.dm_clr_properties

+0

Cuando ejecuto el SELECT * FROM sys.dm_clr_properties consigo el siguiente: "directorio: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ versión: v4.0.30319 Estado: CLR está inicializado" que para mí indica que se usa v4.0. –

+0

He agregado la respuesta a esa declaración a la pregunta principal también. –

6

en su puesto en Intel que usted referencia, si lo lee de cerca, se dice:

SQL Server 2008 y el próximo lanzamiento SQL Server 2008 R2, previamente nombre en código "Kilimanjaro", se tanto seguir para cargar la última versión de servicio de la versión 2.0 CLR.

Y más adelante:

Mientras que las versiones futuras de SQL Server pueden cargar nuevas versiones del CLR, o incluso soportar la carga de múltiples de CLR en el proceso, versión 2.0 de el CLR está aquí para quedarse para SQLCLR dentro de SQL Server 2008 y SQL Server 2008 R2.

No sé cómo se las arregla para obtener algo como .NET 4 cargado dentro de SQL Server 2008 R2 ....

14

Experimenté el mismo problema molesto. Ninguna de las cosas de Geografía/Geometría en mi base de datos funcionó. Me llevó algún reinstala unsuccesfull de servidor SQL para finalmente (algunas semanas más tarde!) encuentra la siguiente clave en mi registro había sido puesto a '1'

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ OnlyUseLatestCLR

cuando restablecerlo a '0', y reiniciar la máquina, ¡las cosas funcionaron de nuevo!

Hans

0

he tenido este problema durante un día y después de la actualización de las ventanas y marcos .NET problema disappeared.the problema se refiere al marco .Net tratar de repararlo.

Cuestiones relacionadas