Archivos DLL configurables.

06/02/2009 - 10:54 por Rafael Villaran. RAVIPE | Informe spam
Hola a todos.
Estoy creando una librería *.dll en C# para distribuir en los equipos de mi
empresa y como referencia en nuestra aplicaciones.
¿Existe alguna posibilidad de crearla configurable?. O sea, enlazar la
librería a un archivo XML, por ejemplo, con los parámetros de la misma. Al
instanciar la clase que contiene la librería esta tomaría los valores de su
archivo de configuración.
Al registrar la librería nos debería avisar si no se encuentra el archivo de
configuración o de dependencias.
Espero que la idea haya quedado clara.
Muchas gracias a todos.
Saludos.
rafael villarán

Preguntas similare

Leer las respuestas

#1 RFOG
06/02/2009 - 11:18 | Informe spam
Hasta donde yo sé, los ensamblados .NET en forma DLL no tienen el
dllmain de las nativas, por lo que hacerlo de forma automática no creo
que se pueda. Repito que no estoy seguro, quizás se pueda de alguna
forma y el .NET tenga algún mecanismo para disparar automáticamente
algo durante la carga que yo desconozco.

Pero a fin de cuentas una DLL no es más que un programa "muerto" que
toma vida cuando una aplicación enlaza con él, de forma que allí
dentro puedes poner lo que quieras. Entiendo que esa DLL va a ser una
biblioteca común con código compartido, por lo que será cargada por
varias aplicaciones de forma simultánea. En C++ existen mecanismos
para permitir almacenamiento local y/o global compartido, en .NET creo
que todas esas florituras no están y todo es local a cada aplicación
que cargue la DLL...

La idea es entonces implementar una clase estática dentro de la DLL
que se encargue de inicializar la DLL, y si no se ha llamado a esa
función nada de la dll funcionará. Algo así:

public static class InitAssembly
{
internal m_bIsInitialized=false;
public void InitAssemby(){m_bIsInitialized=true;}
}

public class Hola
{
public void Hola()
{
if(!m_bIsInitialized)
throw new AssemblyNotInitialized("Inicializa
la DLL");
}
}

Etc.

Incluso podrías implementar un Singleton para que sólo se pueda llamar
al método de iniclialización una sola vez.

De todos modos, son sólo ideas. Quizás estos mecanismos ya estén
disponibles en .NET y yo lo desconozco.

On Fri, 6 Feb 2009 01:54:02 -0800, Rafael Villaran. RAVIPE
wrote:

Hola a todos.
Estoy creando una librería *.dll en C# para distribuir en los equipos de mi
empresa y como referencia en nuestra aplicaciones.
¿Existe alguna posibilidad de crearla configurable?. O sea, enlazar la
librería a un archivo XML, por ejemplo, con los parámetros de la misma. Al
instanciar la clase que contiene la librería esta tomaría los valores de su
archivo de configuración.
Al registrar la librería nos debería avisar si no se encuentra el archivo de
configuración o de dependencias.
Espero que la idea haya quedado clara.
Muchas gracias a todos.
Saludos.
rafael villarán


ÿþM
Respuesta Responder a este mensaje
#2 Alberto Poblacion
06/02/2009 - 11:33 | Informe spam
"Rafael Villaran. RAVIPE"
wrote in message news:
Estoy creando una librería *.dll en C# para distribuir en los equipos de
mi
empresa y como referencia en nuestra aplicaciones.
¿Existe alguna posibilidad de crearla configurable?. O sea, enlazar la
librería a un archivo XML, por ejemplo, con los parámetros de la misma. Al
instanciar la clase que contiene la librería esta tomaría los valores de
su
archivo de configuración.



No entiendo la pregunta. ¿Qué es lo que te falta para conseguir lo que
quieres? ¿No sabes abrir el xml desde el constructor de la clase? ¿O
enontrar su ruta? ¿O procesar el contenido?
¿Qué es concretamente lo que te falta saber para abrir un archivo xml
desde la dll y utilizar su contenido?
Respuesta Responder a este mensaje
#3 Rafael Villaran. RAVIPE
06/02/2009 - 11:42 | Informe spam
RFOG muchas gracias por tu pronta respuesta e interés.
Aunque no definitiva, tus comentarios me van a servir de ayuda.
Aún así esperaré a ver si alguien nos alumbra con sus conocimientos.
De nuevo muchas gracias.
Un Saludo.

"RFOG" wrote:

Hasta donde yo sé, los ensamblados .NET en forma DLL no tienen el
dllmain de las nativas, por lo que hacerlo de forma automática no creo
que se pueda. Repito que no estoy seguro, quizás se pueda de alguna
forma y el .NET tenga algún mecanismo para disparar automáticamente
algo durante la carga que yo desconozco.

Pero a fin de cuentas una DLL no es más que un programa "muerto" que
toma vida cuando una aplicación enlaza con él, de forma que allí
dentro puedes poner lo que quieras. Entiendo que esa DLL va a ser una
biblioteca común con código compartido, por lo que será cargada por
varias aplicaciones de forma simultánea. En C++ existen mecanismos
para permitir almacenamiento local y/o global compartido, en .NET creo
que todas esas florituras no están y todo es local a cada aplicación
que cargue la DLL...

La idea es entonces implementar una clase estática dentro de la DLL
que se encargue de inicializar la DLL, y si no se ha llamado a esa
función nada de la dll funcionará. Algo así:

public static class InitAssembly
{
internal m_bIsInitialized=false;
public void InitAssemby(){m_bIsInitialized=true;}
}

public class Hola
{
public void Hola()
{
if(!m_bIsInitialized)
throw new AssemblyNotInitialized("Inicializa
la DLL");
}
}

Etc.

Incluso podrías implementar un Singleton para que sólo se pueda llamar
al método de iniclialización una sola vez.

De todos modos, son sólo ideas. Quizás estos mecanismos ya estén
disponibles en .NET y yo lo desconozco.

On Fri, 6 Feb 2009 01:54:02 -0800, Rafael Villaran. RAVIPE
wrote:

>Hola a todos.
>Estoy creando una librería *.dll en C# para distribuir en los equipos de mi
>empresa y como referencia en nuestra aplicaciones.
>¿Existe alguna posibilidad de crearla configurable?. O sea, enlazar la
>librería a un archivo XML, por ejemplo, con los parámetros de la misma. Al
>instanciar la clase que contiene la librería esta tomaría los valores de su
>archivo de configuración.
>Al registrar la librería nos debería avisar si no se encuentra el archivo de
>configuración o de dependencias.
>Espero que la idea haya quedado clara.
>Muchas gracias a todos.
>Saludos.
>rafael villarán
ÿþM

Respuesta Responder a este mensaje
#4 Rafael Villaran. RAVIPE
06/02/2009 - 13:39 | Informe spam
Vamos a ver si soy capaz de explicarme.
Yo desarrollo una librería. Archivo dll que distribuyo en mis equipos.
Esta librería internamente maneja unos valores, declaro una constante con un
valor. Valor este que accedo tanto desde dentro de la librería como al
instanciarla si me hiciera falta. P.e.:

public const string DESCR_HOSPI = "Hospital General"

Si se cambiara el nombre del hospital yo tendría que cambiarlo en el fuente,
tendría que volver a compilar la librería y tendría que volver a
distribuirla.

A mi me gustaría que no tuviésemos que volver a compilar, o sea, se hace
parametrizable, los parámetros los tomas de un archivo y ese archivo se
distribuye con la librería. Perfecto, no creo que sea ningún problema leer
un XML, que se encontraría en la misma ruta de la librería y ahí estarían los
parámetros configurables de la librería. Es más si el archivo no se encuentra
la librería podría lanzar una excepción que avisara de la situación.
Mi pregunta va en el sentido de si .NET contempla de alguna manera este tipo
de librerías y se distribuyen con un tipo de archivo concreto, de
dependencias, no sé. La idea sobre todo es que al registrar la librería se
exigiera ese archivo, de lo contrario no se permite el registro.

No sé si me he explicado bien o si realmente me estoy complicando la vida
más de lo normal.

Muchas Gracias por todo Alberto. Veo que estás siempre a pié de cañón.
De nuevo muchas gracias.



"Alberto Poblacion" wrote:

"Rafael Villaran. RAVIPE"
wrote in message news:
> Estoy creando una librería *.dll en C# para distribuir en los equipos de
> mi
> empresa y como referencia en nuestra aplicaciones.
> ¿Existe alguna posibilidad de crearla configurable?. O sea, enlazar la
> librería a un archivo XML, por ejemplo, con los parámetros de la misma. Al
> instanciar la clase que contiene la librería esta tomaría los valores de
> su
> archivo de configuración.

No entiendo la pregunta. ¿Qué es lo que te falta para conseguir lo que
quieres? ¿No sabes abrir el xml desde el constructor de la clase? ¿O
enontrar su ruta? ¿O procesar el contenido?
¿Qué es concretamente lo que te falta saber para abrir un archivo xml
desde la dll y utilizar su contenido?


Respuesta Responder a este mensaje
#5 Alberto Poblacion
06/02/2009 - 14:06 | Informe spam
"Rafael Villaran. RAVIPE"
wrote in message news:
[...]
Mi pregunta va en el sentido de si .NET contempla de alguna manera este
tipo
de librerías y se distribuyen con un tipo de archivo concreto, de
dependencias, no sé.



Bueno, .Net contempla este mecanismo de configuración a través de los
archivos ".config"... Pero en este caso no resuelven tu problema, porque la
DLL siempre busca el .config del .EXE que llamó a la DLL (a no ser que la
cargues en un AppDomain y le pases como argumento otro .config distinto).
Así que el ".config" no queda asociado a la DLL. Me temo que la única forma
de adjuntar a tu dll el archivo de configuración es que lo leas mediante tu
propio código, por ejemplo en el constructor de clase de cada una de las
clases que haya en la DLL.

La idea sobre todo es que al registrar la librería se
exigiera ese archivo, de lo contrario no se permite el registro.



Estás pensando en librerías de tipo COM, no de .Net. Las librerías de
.Net no se registran. Símplemente se copian a un directorio y ya está.
Tendría que ser el proceso de instalación que copia las librerías el que
copie simultáneamente ese archivo. Por ejemplo, si se instala con un .msi,
desde luego no hay problema en que el msi instale también el archivo de
configuración.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida