Cómo actualizar o degradar un ensamblado que tiene un ensamblado de referencia para un objeto CLR en una instancia de SQL Server 2005


Nº de error: 490 (revisión SQL)

Resumen


Cuando intenta actualizar o degradar un ensamblado para un objeto de common language runtime (CLR) en una instancia de Microsoft SQL Server 2005, no puede cambiar la versión de los ensamblados de referencia en los metadatos del ensamblado. Además, si utiliza un ensamblado de nombre seguro para un objeto CLR, no se puede degradar el ensamblado mediante la instrucción ALTER ASSEMBLY.

INTRODUCCIÓN


En este artículo se describe cómo actualizar o degradar un ensamblado que tiene un ensamblado de referencia para un objeto CLR en una instancia de SQL Server 2005.

Más información


Cómo actualizar o degradar un ensamblado

En SQL Server 2005, puede utilizar la instrucción ALTER ASSEMBLY para actualizar o degradar un ensamblado independiente que no se creó con un nombre seguro. Para un ensamblado con nombre seguro, se puede actualizar pero no se puede degradar el ensamblado mediante la instrucción ALTER ASSEMBLY.

No se puede actualizar o degradar un ensamblado en la situación siguiente:
  • Ensamblado A se crea para un objeto CLR en una instancia. Ensamblado A tiene un ensamblado de referencia. El ensamblado es el ensamblado B.
  • El ensamblado B no tiene ningún ensamblado.
  • Vuelva a compilar el ensamblado para hacer referencia a una versión diferente del ensamblado B.
En este escenario, puede utilizar la instrucción ALTER ASSEMBLY para actualizar el ensamblado B a una nueva versión. Si el ensamblado B no es un ensamblado con nombre seguro, se puede también degradar el ensamblado B a una versión anterior. Sin embargo, no puede utilizar la instrucción ALTER ASSEMBLY para actualizar o degradar el ensamblado A la versión recompilados.

Este comportamiento se produce porque SQL Server crea una directiva de fusión de CLR cuando se crea el ensamblado A. Esta directiva de fusión de CLR asigna automáticamente la versión del ensamblado B en los metadatos del ensamblado A la versión actual del ensamblado B. SQL Server carga la nueva versión del ensamblado B en tiempo de ejecución al actualizar o degradar el ensamblado B a otra versión. Este comportamiento se produce aunque el ensamblado A hace referencia a la versión original del ensamblado B. Sin embargo, cuando intenta actualizar o degradar un ensamblado al ensamblado A contiene una nueva versión del ensamblado B en los metadatos, se producirá un error en la instrucción ALTER ASSEMBLY y recibe mensajes de error similares a los siguientes:
Mensaje de error 1
Msj 6529, nivel 16, estado 1, línea 1

Error de ALTER ASSEMBLY porque ha cambiado la identidad del ensamblado 'RefAsm'. Asegúrese de que no han cambiado la versión, el nombre y la clave pública.
Mensaje de error 2
Msj 6282, nivel 16, estado 1, línea 1

Error de ALTER ASSEMBLY porque cambiarían los ensamblados de referencia. La lista de ensamblados que se hace referencia debe permanecer igual.

Actualizar o degradar el ensamblado

Notas:
  • Estos pasos actualización o degradar el ensamblado A en el escenario descrito en la sección "Cómo actualizar o degradar un ensamblado".
  • En este ejemplo se supone que las versiones de los dos ensamblados son 1.0.0.0 y los ensamblados se escriben en C#. Si sigue estos pasos, intenta actualizar el ensamblado A y ensamblado B a la versión 2.0.0.0.
Para actualizar o degradar el ensamblado A, siga estos pasos.
  1. Copia de la versión 1.0.0.0 del ensamblado B a una carpeta.
  2. Modificar y, a continuación, vuelva a compilar el ensamblado B a la versión 2.0.0.0.
  3. Utilice la instrucción ALTER ASSEMBLY para actualizar el ensamblado B en SQL Server 2005.
  4. Modificar y volver a compilar el ensamblado A la versión 2.0.0.0. Al hacer esto, la versión de referencia 1.0.0.0 del ensamblado B desde la copia de seguridad realizada en el paso 1. Para ello, utilice la herramienta de compilador de Csc.exe junto con el modificador /reference . Por ejemplo, utilice el comando siguiente:
    csc/target: library/out:AssemblyA.dll AssemblyA.cs /reference AssemblyInfo.cs: "BackupFolder\AssemblyB.dll"
    Nota: Para comprobar la versión del ensamblado B en los metadatos del ensamblado A, abra un ensamblado utilizando la utilidad Ildasm.exe. A continuación, compruebe la información de metadatos para el ensamblado que se hace referencia en la sección de manifiesto .
  5. Utilice la instrucción ALTER ASSEMBLY para actualizar un ensamblado en SQL Server 2005.

Cómo degradar un ensamblado con nombre seguro

Si utiliza un ensamblado de nombre seguro para un objeto CLR, SQL Server 2005 no admite el uso de la instrucción ALTER ASSEMBLY para degradar los ensamblados. Si intenta degradar la versión de un ensamblado mediante la instrucción ALTER ASSEMBLY, recibirá un mensaje de error similar al siguiente:
Msj 6579, nivel 16, estado 1, línea 1
Modificar ensamblado de ' Asm1, versión = 1.1.0.0, referencia cultural = neutral, publickeytoken = 3a52b896cff0513d, processorarchitecture = msil' a ' Asm1, versión = 1.0.0.0, culture = neutral, publickeytoken = 3a52b896cff0513d, processorarchitecture = msil' no es un actualización compatible.
Cuando desea degradar un ensamblado con nombre seguro, siga estos pasos:
  1. Quitar todos los objetos que dependen del ensamblado.
  2. Quitar la versión más reciente del ensamblado.
  3. Crear la versión anterior del ensamblado.
  4. Crear todos los objetos necesarios que dependen del ensamblado.
Nota: Puede actualizar un ensamblado de nombre seguro mediante la instrucción ALTER ASSEMBLY. Sin embargo, si la actualización implica a un ensamblado de referencia, debe seguir los mismos pasos que se enumeran en la sección "Actualizar o degradar un ensamblado".

Referencias


Para obtener más información acerca de la instrucción ALTER ASSEMBLY, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):Para obtener más información acerca de la utilidad Ildasm.exe, visite el siguiente sitio Web de MSDN: