Duda acerca de DLL usada en un WinApp

04/02/2005 - 18:44 por Misael Chuc Sanchez | Informe spam
Sres.

Que tal, quiza por la falta de practica y conocimiento acerca del Mundo
de .Net me esta pasando lo siguiente:

Tengo una solucion con dos proyectos: un ClassLybrary y un Windows
Application, una vez que termino la implementacion del ClassLybrary lo
compilo y luego en mi aplicacion agrego la referencia al "Assembly"
recien creado a mi Windows Application, luego en codigo de la aplicacion
hago la debida instanciacion del objeto que esta en el assembly,
ejecuto sus metodos y funciona, hasta aqui todo era miel sobre hojuelas,
pero al hacer un cambio en algun metodo de mi class library mi WindApp
no ve esos cambios, tengo que recompilar el WinApp para que pueda ver
los cambios hechos en al ClassLibrary :<.


Segun entiendo este comportamiento es normal debido a que el assembly
esta referenciado dentro de mi WinApp.

Mi duda es: Hay alguna forma de trabajar el Assembly y mi WinApp que
cada vez que haga un cambio en el assebly no tenga que recompilar mi
WinApp para que vea los cambios?.

Mas o menos como el comportamiento de los DLL que se usan en una
aplicacion Win32, no era necesario estar recompilando el executable cada
vez que se modificaba el DLL.

Espero no haberlos confundido con mi problema, pero les doy las gracias
de antemano por haber leido mi E-mail.

Saludos desde Cancún. Quintana Roo, México.

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
04/02/2005 - 19:21 | Informe spam
Mi duda es: Hay alguna forma de trabajar el Assembly y mi WinApp que
cada vez que haga un cambio en el assebly no tenga que recompilar mi
WinApp para que vea los cambios?.



No es que tengas que recompilar el assembly. Lo que pasa es que la DLL a la
que haces referencia se copia al directorio de la aplicacion y esa es la que
se usa. Si al compilar se detecta que la DLL original cambio entonces se
copia al directorio de la aplicacion. Lo que debes hacer es copiar la DLL
cuando la cambias al directorio de la otra aplicacion. Esto funciona asi
mientras el assembly este sin firmar (y no hayas hecho cosas como cambiar el
nombre a las clases). Si esta firmado deberas forzar el uso de una nueva
version usando el app.config o recompilar el proyecto con la nueva version.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Hay dos cosas infinitas: el universo y la estupidez humana.
Albert Einstein
Respuesta Responder a este mensaje
#2 htb
04/02/2005 - 20:55 | Informe spam
Mi duda es: Hay alguna forma de trabajar el Assembly y




mi WinApp que
cada vez que haga un cambio en el assebly no tenga que




recompilar mi
WinApp para que vea los cambios?.





Como los proyectos estan en la misma solucion, en el
WinApp no referencies el dll, haz referencia al
proyecto, "Add Reference, Tab Projects" asi si cambias el
Assembly, automaticamente se veran los cambios.
Respuesta Responder a este mensaje
#3 Misael Chuc Sanchez
04/02/2005 - 21:02 | Informe spam
Que tal Eduardo, muchas gracias por tu respuesta, podrias pof favor
extender tu explicacion?, te lo agradeceria.

Lo que pasa, es que queremos liberar una aplicacion Windows Application
hecha con VB.Net(2003), el cual cuenta con 4 DLL's y necesitamos
asegurarnos que cuando algun metodo de alguna de las clases
implementadas en los DLL's cambien por decir, la forma de hacer el
caculo de los intereses, no tengamos que compilar el Executable para que
pueda ver los cambio en el metodo del calculo de intereses.

Por ejemplo:

-Creo una nueva solucion vacia.
-Le agrego un proyecto "ClassLibrary" llamada "FinancialCLS"
-En esta ClassLib. defino una Clase llamado "CALCULOSFINACIEROS"
-y uno de sus metodos por ejemplo llamado "Mensage" devuelve un MsgBox
con el texto "Bienvenidos"
-Compilo esa ClassLib.
-Luego agrego a la solucion un proyecto de tipo Windows Application
-Le agrego al nuevo proyecto la referecia al DLL descrita anteriormente.
-Declaro e instacio una variable del tipo objCalc de tipo
CALCULOSFINANCIEROS dentro de mi windows application.
-El ejecuto el metodo "Mensage" y aparece en mi aplicacion el Dialogo
con la frase "Bienvenidos"
-Luego vuelvo al proyecto del ClassLibrary y modifico el metodo
"Mensage" y ahora acompleto el Texto a desplegar a "Bienvendos al
SISTEMA DE CALCULO FINANCIERO"
-Compilo unicamente el classlibrary.
Vuelvo a correr el Excutable y mando ejecutar de nuevo el metodo
"Mensage" y mi mensage es el mismo, aparece unicamente "Bienvenido".
-Ahora si vuelvo a compilar unicamente mi Windows Application y hago la
prueba de nuevo, ahora si me muestra el mensage actualizado.


Que puede se que este haciendo mal, por eso te comentaba si me puedes
explicar un poco mas o pagina para consultar.

De antemano, gracias.


Eduardo A. Morcillo [MS MVP VB] wrote:
No es que tengas que recompilar el assembly. Lo que pasa es que la


DLL a la
que haces referencia se copia al directorio de la aplicacion y esa es la que
se usa. Si al compilar se detecta que la DLL original cambio entonces se
copia al directorio de la aplicacion. Lo que debes hacer es copiar la DLL
cuando la cambias al directorio de la otra aplicacion. Esto funciona asi
mientras el assembly este sin firmar (y no hayas hecho cosas como cambiar el
nombre a las clases). Si esta firmado deberas forzar el uso de una nueva
version usando el app.config o recompilar el proyecto con la nueva version.

Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
05/02/2005 - 01:55 | Informe spam
Cuando agregas a un proyecto una referencia a una DLL que no esta en la GAC
esta DLL se copia al directorio de BIN del proyecto, pues el nuevo proyecto
necesita poder encontrar esa DLL al momento de cargarse y al no estar en la
GAC la ubicacion mas conveniente es en el mismo directorio de la aplicacion.

Cuando cambias esa DLL y la vuelves a compilar, el otro proyecto no lo sabe
y sigue teniendo en su carpeta BIN la version anterior. Al volver a
compilarlo se verfica si las versiones de la DLL son distintas y de serlo se
actualiza la copia.

Esto no significa que tengas que volver a compilar para que tome la nueva
version. Si copias manualmente la DLL nueva en la carpeta del otro proyecto
este usara la nueva DLL sin necesidad de volver a compilarlo. Esto siempre y
cuando el ensamblado no tenga un nombre seguro.

Si el ensamblado esta firmado con un nombre seguro, haciendo lo de antes no
funcionaria a menos que forzaras a la aplicacion a usar una version
espefica. Esto lo haces en el app.config con el tag <bindingRedirect>:
http://msdn.microsoft.com/library/s...direct.asp

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

La investigación ha pregresado tantísimo,
que practicamente no queda nadie sano.
Aldous Huxley
Respuesta Responder a este mensaje
#5 Misael Chuc Sanchez
07/02/2005 - 18:17 | Informe spam
Eduardo A. Morcillo [MS MVP VB] wrote:
Cuando agregas a un proyecto una referencia a una DLL que no esta en la GAC
esta DLL se copia al directorio de BIN del proyecto, pues el nuevo proyecto
necesita poder encontrar esa DLL al momento de cargarse y al no estar en la
GAC la ubicacion mas conveniente es en el mismo directorio de la aplicacion.

Cuando cambias esa DLL y la vuelves a compilar, el otro proyecto no lo sabe
y sigue teniendo en su carpeta BIN la version anterior. Al volver a
compilarlo se verfica si las versiones de la DLL son distintas y de serlo se
actualiza la copia.

Esto no significa que tengas que volver a compilar para que tome la nueva
version. Si copias manualmente la DLL nueva en la carpeta del otro proyecto
este usara la nueva DLL sin necesidad de volver a compilarlo. Esto siempre y
cuando el ensamblado no tenga un nombre seguro.

Si el ensamblado esta firmado con un nombre seguro, haciendo lo de antes no
funcionaria a menos que forzaras a la aplicacion a usar una version
espefica. Esto lo haces en el app.config con el tag <bindingRedirect>:
http://msdn.microsoft.com/library/s...direct.asp



Muchas Gracias Eduardo, ahora ya quedo claro
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida