ASP.NET - Directivas de enlace en ensamblados de .NET

 
Vista:

Directivas de enlace en ensamblados de .NET

Publicado por sir_elvis (2 intervenciones) el 04/12/2008 18:05:05
No sé si alguna vez os ha pasado eso de estar desarrollando varios ensamblados cada uno con distintas versiones y dependencias de los otros. Pues bien, si cada uno de esos ensamblados lo está desarrollando un grupo distinto, es normal que cada ensamblado tenga un número de versión diferente. Ahora resulta que esos ensamblados deben estar instalados en la GAC, pues hay varias aplicaciones ASP.NET dependientes de ellos, cada una de las cuales desarrollada también por distintos grupos de trabajo.

Cada grupo desarrolla su ensamblado y a medida que avanza, cambia el número de versión, y como los ensamblados se desarrollan a distinto ritmo unos de otros, y también a distinto ritmo que las aplicaciones ASP.NET dependientes de ellos, de no ser por las directivas de enlace (directivas de editor, archivos de configuración de aplicación o directivas de equipo, para los amigos), cada cambio de versión de un ensamblado haría necesaria la recompilación de los ensamblados dependientes, de los dependientes de los dependientes, de las aplicaciones ASP.NET dependientes, etc.

Así pues, para varios equipos de desarrollo, las directivas de enlace parecen la panacea, sobre todo si ponen rangos de versión del tipo:

1.0.0.0-2.5.7.99999 --> 2.5.7.23564

Y todo va bien, hasta que se ha de migrar del framework 1.1 al 2.0 y, misteriosamente, siguiendo el mismo proceso, todo falla. Parece como si la GAC del framework 2.0 no supiera qué demonios es una directiva de enlace.

Entonces uno busca y rebusca durante muchos días una solución por la MSDN, hasta que se encuentra un ejemplo perdido de la mano de Dios en el que ponen una directiva de enlace del tipo:

1.0.0.0-65535.65535.65535.65535 --> 1.5.0.23564

Y en su caso concreto le da por probar a poner como directiva:

1.0.0.0-2.5.7.65535 --> 2.5.7.23564

Y TODO FUNCIONA OTRA VEZ.

Esto en la MSDN no aparece explícitamente por ninguna parte, y en ningún otro foro de Internet en este momento. Tan sólo en la MSDN hay una pista en la que aparece una nota importante que arroja algo de luz para el framework 1.1:

http://msdn.microsoft.com/es-es/library/system.reflection.assemblyversionattribute.aspx

y que han quitado para la versión 2.0:

http://msdn.microsoft.com/es-es/library/system.reflection.assemblyversionattribute(VS.80).aspx

¿Curioso, verdad?

Un saludo, y espero que si hay algún otro grupo de desarrollo al que le pase lo mismo, este post pueda arrojarles algo de luz.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Directivas de enlace en ensamblados de .NET

Publicado por m (121 intervenciones) el 04/12/2008 22:50:31
Que tal,
pues gracias por el post.
Espero que el administrador de este sitio,
cree un modulo de post, para que no
se pierdan cosas tan interesantes.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Se me olvidaba

Publicado por sir_elvis (2 intervenciones) el 05/12/2008 10:03:06
Al hacer la nota, no puse el error típico que el framework suele devolver al poner una directiva de enlace incorrecta, es decir, con algún número mayor que 65535. Un volcado típico sería:

Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración
Just-In-Time (JIT) en lugar de a este cuadro de diálogo.

************** Texto de la excepción **************
System.IO.FileNotFoundException: No se puede cargar el archivo o ensamblado 'invesflow, Version=3.0.0.23135, Culture=neutral, PublicKeyToken=159574ffe4118e68' ni una de sus dependencias. El sistema no puede hallar el archivo especificado.
Nombre de archivo: 'invesflow, Version=3.0.0.23135, Culture=neutral, PublicKeyToken=159574ffe4118e68'
en testGacVB.Form1.Button1_Click(Object sender, EventArgs e)
en System.Windows.Forms.Control.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ButtonBase.WndProc(Message& m)
en System.Windows.Forms.Button.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

=== Información de estado anterior al enlace ===
LOG: Usuario = PITYCvagomez
LOG: DisplayName = invesflow, Version=3.0.0.23135, Culture=neutral, PublicKeyToken=159574ffe4118e68
(Fully-specified)
LOG: Appbase = file:///C:/Proyectos/PITYC/TestGacVB/testGacVB/testGacVB/bin/Release/
LOG: PrivatePath inicial = NULL
Ensamblado de llamada : testGacVB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Este enlace empieza en el contexto de carga default.
LOG: No se encontró ningún archivo de configuración de la aplicación.
LOG: Utilizando el archivo de configuración del equipo en c:WINDOWSMicrosoft.NETFrameworkv2.0.50727configmachine.config.
LOG: Referencia posterior a la directiva: invesflow, Version=3.0.0.23135, Culture=neutral, PublicKeyToken=159574ffe4118e68
LOG: Intento de descarga de la nueva dirección URL file:///C:/Proyectos/PITYC/TestGacVB/testGacVB/testGacVB/bin/Release/invesflow.DLL.
LOG: Intento de descarga de la nueva dirección URL file:///C:/Proyectos/PITYC/TestGacVB/testGacVB/testGacVB/bin/Release/invesflow/invesflow.DLL.
LOG: Intento de descarga de la nueva dirección URL file:///C:/Proyectos/PITYC/TestGacVB/testGacVB/testGacVB/bin/Release/invesflow.EXE.
LOG: Intento de descarga de la nueva dirección URL file:///C:/Proyectos/PITYC/TestGacVB/testGacVB/testGacVB/bin/Release/invesflow/invesflow.EXE.


************** Ensamblados cargados **************
mscorlib
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
testGacVB
Versión del ensamblado: 1.0.0.0
Versión Win32: 1.0.0.0
Código base: file:///C:/Proyectos/PITYC/TestGacVB/testGacVB/testGacVB/bin/Release/testGacVB.exe
----------------------------------------
Microsoft.VisualBasic
Versión del ensamblado: 8.0.0.0
Versión Win32: 8.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Windows.Forms
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Runtime.Remoting
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Windows.Forms.resources
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_es_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
Versión del ensamblado: 2.0.0.0
Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
Código base: file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------

************** Depuración JIT **************
Para habilitar la depuración Just In Time (JIT), el archivo de configuración de esta
aplicación o equipo (machine.config) debe tener el
valor jitDebugging establecido en la sección system.windows.forms.
La aplicación también se debe compilar con la depuración
habilitada

Por ejemplo:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

Cuando esté habilitada la depuración JIT, cualquier excepción no controlada
se enviará al depurador JIT registrado en el equipo
en lugar de controlarlo mediante el cuadro de diálogo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar