Mensaje de error al ejecutar una rutina CLR o utilizar un ensamblado en SQL Server: "ensamblado en el almacén de host tiene una firma diferente a la del ensamblado en GAC. (Excepción de HRESULT: 0x80131050) "

Seleccione idioma Seleccione idioma
Id. de artículo: 949080 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Tenga en cuenta los siguientes escenarios.

Escenario 1

Crear una rutina de tiempo de ejecución (CLR) de lenguaje común que hace referencia a un ensamblado de Microsoft.NET Framework. El ensamblado de.NET Framework no está documentado en Artículo de Knowledge Base 922672. A continuación, instalar una revisión basada en.NET Framework 2.0 o 3.5 de.NET Framework.

Escenario 2

Crea un ensamblado y, a continuación, registrar el ensamblado en una base de datos de Microsoft SQL Server. A continuación, instalar una versión diferente del ensamblado en la caché de ensamblados Global (GAC).

Cuando ejecute la rutina CLR o utilizar el ensamblado de cualquiera de estos escenarios en SQL Server, recibirá un mensaje de error similar al siguiente:

Servidor: Msg 6522, nivel 16, estado 2, línea 1
Una de.NET Framework Error durante la ejecución de la rutina de definido por el usuario o un agregado 'getsid':

System.IO.FileLoadException: No se pudo cargar archivo o ensamblado ' System.DirectoryServices, versión 0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' o alguna de sus dependencias. Ensamblado de host almacén tiene una firma diferente a la del ensamblado en GAC. (Excepción de HRESULT: 0x80131050)

System.IO.FileLoadException:

Causa

Cuando el CLR carga un ensamblado, CLR comprueba si el mismo ensamblado está en la GAC. Si es el mismo ensamblado en la GAC, el CLR comprueba que coincide con los identificadores de versión de módulo (MVIDs) de estos ensamblados. Si las MVIDs de éstos los ensamblados en caso contrario, recibirá el error del mensaje que el "Síntomas" de sección con menciones de honor.

Cuando se vuelve a compilar un ensamblado, el MVID de la modificaciones del conjunto. Por lo tanto, si actualiza el.NET Framework, los ensamblados de.NET Framework tiene diferentes MVIDs debido a que se vuelven a compilar los ensamblados. Además, Si al actualizar su propio ensamblado, éste es volver a compilar. Por lo tanto, el ensamblado tiene también un diferentes MVID.

Solución

Solución 1

Para solucionar temporalmente el escenario 1 en la sección "Síntomas", debe actualizar manualmente los ensamblados de.NET Framework en SQL Server. Para ello, utilice la instrucción ALTER ASSEMBLY para punto en la nueva versión del ensamblado de.NET Framework en la siguiente carpeta:
%Windir%\Microsoft.NET\Framework\Versión
NotaVersión representa la versión de.NET Framework que usted instalando o actualizando.

Solución 2

Para solucionar temporalmente el escenario 2 pda la sección "Síntomas" de sección, utilice la instrucción ALTER ASSEMBLY para editar el ensamblado en la base de datos.

Si el problema persiste Después de hacerlo, coloque el ensamblado de la base de datos y, a continuación, registrar la nueva versión de el ensamblado en la base de datos.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Se refiere a:".

Más información

No recomendamos que utilice los ensamblados de.NET Framework que no están documentados en el artículo de Knowledge Base 922672. Artículo de Knowledge Base 922672 enumera los ensamblados que se evalúan en el entorno con host de CLR de SQL Server.

Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
922672 Directiva de soporte técnico para los ensamblados de.NET Framework no se hayan probado en el entorno con host de CLR de SQL Server

Descripción de las rutinas CLR

Rutinas CLR incluir los siguientes objetos que se implementan mediante el uso de Integración de SQL Server con el CLR de.NET Framework:
  • Funciones definidas por el usuario con valores escalares (escalares UDF)
  • Funciones definidas por el usuario con valores de tabla (TVF)
  • Procedimientos definidos por el usuario (UDPs)
  • Desencadenadores definidos por el usuario
  • Tipos de datos definidos por el usuario
  • Agregados definidos por el usuario

Ensamblados para la actualización después de instalar 3.5 de.NET Framework

Después de instalar 3.5 de.NET Framework, debe utilizar el ALTER ENSAMBLADO instrucción para actualizar los siguientes ensamblados:
  • Accessibility.dll
  • AspNetMMCExt.dll
  • Cscompmgd.dll
  • IEExecRemote.dll
  • IEHost.dll
  • IIEHost.dll
  • Microsoft.Build.Conversion.dll
  • Microsoft.Build.Engine.dll
  • Microsoft.Build.Framework.dll
  • Microsoft.Build.Tasks.dll
  • Microsoft.Build.Utilities.dll
  • Microsoft.CompactFramework.Build.Tasks.dll
  • Microsoft.JScript.dll
  • Microsoft.VisualBasic.Vsa.dll
  • Microsoft.Vsa.dll
  • Microsoft.Vsa.Vb.CodeDOMProcessor.dll
  • Microsoft_VsaVb.dll
  • Sysglobl.dll
  • System.Configuration.Install.dll
  • System.Design.dll
  • System.DirectoryServices.dll
  • System.DirectoryServices.Protocols.dll
  • System.Drawing.dll
  • System.Drawing.Design.dll
  • System.EnterpriseServices.dll
  • System.Management.dll
  • System.Messaging.dll
  • System.Runtime.Serialization.Formatters.Soap.dll
  • System.ServiceProcess.dll
  • System.Web.dll
  • System.Web.Mobile.dll de forma automática
  • System.Web.RegularExpressions.dll
Estos ensamblados están en la carpeta siguiente:
%Windir%\Microsoft.NET\Framework\v2.0.50727\

Cómo conservar los datos de los tipos de datos definido por el usuario una vez que se coloca un ensamblado

Si coloca un ensamblado que utiliza un tipo de datos definidos por el usuario de SQL Server, puede utilizar uno de los métodos siguientes para conservar los datos.

Se supone que ésta es la situación de ejemplo:
  • Crea un ensamblado cuyo nombre es MyAssembly.dll.
  • Las referencias de ensamblado MyAssembly la Ensamblado System.DirectoryServices.dll .
  • Tiene un tipo de datos definidos por el usuario cuyo nombre es MyDateTime.
  • El tipo de datos de MyDateTime utiliza MyAssembly.dll conjunto.
  • Crea una tabla cuyo nombre es MyTable.
  • La tabla MyTable contiene los datos de los datos de MyDateTime tipo.

Método 1: Usar la utilidad de bcp.exe

  1. Utilice la utilidad de Bcp.exe junto con el modificador ? n para copiar los datos de la tabla MyTable en un archivo. Por ejemplo, ejecutar el el siguiente comando en una línea de comandos:
    bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n ?SSQLServerName  -T
  2. En el SQL Server Management Studio, siga estos pasos:
    1. Eliminar la tabla MyTable.
    2. Eliminar el tipo de datos de MyDateTime .
    3. Colocar System.DirectoryServices.dll conjunto.
    4. Coloque el ensamblado MyAssembly .
  3. En el SQL Server Management Studio, siga estos pasos:
    1. Registrar System.DirectoryServices.dll conjunto.
    2. Registrar el ensamblado MyAssembly .
    3. Crear el tipo de datos de MyDateTime .
    4. Crear una nueva tabla que tiene la misma estructura de tabla como la tabla MyTable.
  4. Usar la utilidad de Bcp.exe junto con el modificador ? n para importar los datos desde el archivo en la tabla MyTable. Por ejemplo, ejecutar el el siguiente comando en una línea de comandos:
    bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n ?SSQLServerName  -T

Método 2: Usar la INSERCIÓN... Instrucción SELECT

Se supone que el tipo de datos MyDateTime ocupa 9 bytes en almacenamiento de información.
  1. En SQL Server Management Studio, cree una nueva tabla que contiene una columna de tipo de datos VARBINARY(9) mediante la ejecución de la siguiente instrucción:
    CREATE TABLE TempTable (c1 VARBINARY(9))
  2. Ejecute el siguiente Insertar... Seleccione instrucción para rellenar el Tabla de tempTable:
    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable
  3. En el SQL Server Management Studio, siga estos pasos:
    1. Eliminar la tabla MyTable.
    2. Eliminar el tipo de datos de MyDateTime .
    3. Colocar System.DirectoryServices.dll conjunto.
    4. Coloque el ensamblado MyAssembly .
  4. En el SQL Server Management Studio, siga estos pasos:
    1. Registrar System.DirectoryServices.dll conjunto.
    2. Registrar el ensamblado MyAssembly .
    3. Crear el tipo de datos de MyDateTime .
    4. Crear una nueva tabla que tiene la misma estructura de tabla como la tabla MyTable.
  5. Ejecute el siguiente Insertar... Seleccione instrucción para rellenar el Tabla MyTable:
    INSERT INTO MyTable SELECT c1 FROM TempTable

Referencias

Para obtener más información acerca de la versión del ensamblado, visite el sitio Web de Microsoft Developer Network (MSDN) siguiente:
http://msdn2.Microsoft.com/en-us/library/51ket42z (puede) .aspx
Para obtener más información acerca de cómo actualizar un ensamblado, visite el siguiente Web de MSDN sitio:
http://msdn2.Microsoft.com/en-us/library/ms186711.aspx
Para obtener más información acerca de cómo quitar un ensamblado, visite el siguiente Web de MSDN sitio:
http://msdn2.Microsoft.com/en-us/library/ms177514.aspx
Para obtener más información acerca de cómo registrar un ensamblado en una base de datos de SQL Server 2005 visite el siguiente sitio Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/ms189524.aspx
Para obtener más información acerca de la utilidad de Bcp.exe, visite el siguiente sitio Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/ms162802.aspx

Propiedades

Id. de artículo: 949080 - Última revisión: lunes, 07 de enero de 2013 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Palabras clave: 
kbexpertiseadvanced kbtshoot kbprb kbmt KB949080 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 949080

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com