Problemas con ruta de acceso a un xml

12/04/2005 - 16:47 por andy O | Informe spam
Hola a todos.

Tengo dos proyectos ditintos uno es una clase que lee un archivo mediante un
método estático

public static string dameBDConexion(){

System.IO.StreamReader stream = new System.IO.StreamReader ("Base.xml");
...

}

y otro proyecto que es una consola de prueba, que llama al metodo estático.

El problema es que me da una excepcion de archivo no encontrado. viendo los
logs de error, me percato que el archivo base.xml lo esta buscando en el
directorio debug del proyecto consola y no en el proyecto que lee el XML.

¿Cómo hago para que en lugar de leer desde la ruta que invoca al metodo lo
lea desde el proyecto que implementa la lectura a dicho archivo xml?

Espero que me ayuden
Gracias.

Preguntas similare

Leer las respuestas

#6 Octavio Hernandez
17/04/2005 - 22:51 | Informe spam
Andy,

En cualquier caso (consola, WinForms, ewc.), GetExecutingAssembly() te
devuelve el ensamblado que está EN EJECUCION. Si haces la llamada DENTRO de
la DLL y obtienes la ruta, será la ruta de la la DLL y no del ejecutable que
la llama.

Slds - Octavio

"andy O" escribió en el mensaje
news:
Octavio.

A raiz de mis mproblemas de lectura con el app.config. Opte por este el
método de leer el archivo XML, pero ahora me esta dando doleres de cabeza.

cuando uso
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
+ "\\Base.xml"

En el caso de una app consola que llama a la dll, me devuelve la ruta de
la
consola.
Opte por copiar el xml en el bin del proyecto de la consola, alli si
funciona perfecto.

Pero ¿por qué no me devuelve la ruta de bin del proyecto dll?

Otra cosa, cuando en lugar de usar una app consola uso webform, me
devuelve
la ruta al system32. ¿Qué esta sucediendo?

Tengo varios proyectos que los referencio por medio de VS.

Espero que me ayuden
Gracias





"Octavio Hernandez" escribió:

Andy,

Yo supuse que querías obtener la ruta de la DLL *DESDE DENTRO* de la
propia
DLL. ¿No es así?
Si es desde la aplicación, entonces creo que es mejor que utilices un
fichero de configuración.

Slds - Octavio

"andy O" escribió en el mensaje
news:
> He probado ambos métodos pero me devuelven la ruta de la consola y no
> la
> de
> la clase que lee el xml.
>
> ¿Qué está sucediendo?
>



Respuesta Responder a este mensaje
#7 Miguel Angel Campos
18/04/2005 - 09:09 | Informe spam
Hola Andy,

Creo que el problema lo tienes en la interpretación de como funcionan las
relaciones entre proyectos en Visual Studio. Como tu has dicho tienes dos
proyectos, uno genera una DLL (le llamamos proyecto DLL) y otro genera un
EXE (le llamamos proyecto EXE). Si te fijas en las propiedades de la
referencia desde el proyecto EXE al proyecto DLL, existe una propiedad que
dice Copia Local (que por defecto es True); esto quiere decir que Visual
Studio cuando compila el proyecto EXE a continuación copia la DLL que se ha
generado en el proyecto DLL para así poder ejecutarlo, pero los más
importante, sólo copia la DLL no copia nada mas, y ademas al existir una
copia local el proyecto EXE no sabe donde estaba anteriormente la DLL
original.
Seguro que ahora pienas, pues pongo Copia Local a False, pero eso lo que te
va a provocar es que al ejecutarlo te dira que no encuentra el tipo donde
está definido el método estático. Se pone a false cuando quieres que por
defecto se busque en el GAC, o cuando estableces mediante el fichero de
configuración .config directivas de búsquedas de ensamblados.

Tienes que diferenciar muy bien el marco de trabajo durante el desarrollo y
pruebas locales, del marco de ejecución final de la aplicación. Tienes que
tener en cuenta que si tienes un proyecto con muchas DLL y un sólo EXE,
cuando distribuyas tu aplicación los pondrás todos en un sólo directorio,
junto con los ficheros necesarios (en tu caso por ejemplo los ficheros XML).

Me imagino que aún tienes dudas, así que sigue preguntando.

Un Saludo,

Miguel Angel Campos
MCAD.NET

"andy O" escribió en el mensaje
news:
Hola a todos.

Tengo dos proyectos ditintos uno es una clase que lee un archivo mediante
un
método estático

public static string dameBDConexion(){

System.IO.StreamReader stream = new System.IO.StreamReader ("Base.xml");
...

}

y otro proyecto que es una consola de prueba, que llama al metodo
estático.

El problema es que me da una excepcion de archivo no encontrado. viendo
los
logs de error, me percato que el archivo base.xml lo esta buscando en el
directorio debug del proyecto consola y no en el proyecto que lee el XML.

¿Cómo hago para que en lugar de leer desde la ruta que invoca al metodo lo
lea desde el proyecto que implementa la lectura a dicho archivo xml?

Espero que me ayuden
Gracias.




Respuesta Responder a este mensaje
#8 andy O
19/04/2005 - 15:09 | Informe spam
Gracias Miguel.

Esta claro tu explicación,es que todavia me cuesta trabajo quitarme de la
mente la programación tradicional con VB 6.

Pero no has explicado cómo en modo de pruebas locales puedo hacer que
funcione la lectura xml.
¿O es que debo copiar el xml en el bin del proyecto exe. o igual manera al
bin del proyecto web si es que se trabaja con web.?
Respuesta Responder a este mensaje
#9 Miguel Angel Campos
19/04/2005 - 20:15 | Informe spam
Tienes que copiarlo a mano.
Has pensado en incluir el fichero como un recurso incrustado dentro de la
DLL?

Un Saludo,

Miguel Angel Campos
MCAD.NET

"andy O" escribió en el mensaje
news:
Gracias Miguel.

Esta claro tu explicación,es que todavia me cuesta trabajo quitarme de la
mente la programación tradicional con VB 6.

Pero no has explicado cómo en modo de pruebas locales puedo hacer que
funcione la lectura xml.
¿O es que debo copiar el xml en el bin del proyecto exe. o igual manera
al
bin del proyecto web si es que se trabaja con web.?


Respuesta Responder a este mensaje
#10 andy O
20/04/2005 - 16:41 | Informe spam
Bueno, tendré que copiarlo a mano.
Antes ya había intentado incrustarlo como recurso de la dll, pero no funcionó.

"Miguel Angel Campos" escribió:

Tienes que copiarlo a mano.
Has pensado en incluir el fichero como un recurso incrustado dentro de la
DLL?

Un Saludo,

Miguel Angel Campos
MCAD.NET

"andy O" escribió en el mensaje
news:
> Gracias Miguel.
>
> Esta claro tu explicación,es que todavia me cuesta trabajo quitarme de la
> mente la programación tradicional con VB 6.
>
> Pero no has explicado cómo en modo de pruebas locales puedo hacer que
> funcione la lectura xml.
> ¿O es que debo copiar el xml en el bin del proyecto exe. o igual manera
> al
> bin del proyecto web si es que se trabaja con web.?
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida