2010-03-13 16 views
5

En un VSTO Excel Addin el código:abertura situada en la carpeta complemento

Dim XMLDoc As XElement = XElement.Load("XMLFile1.xml") 

genera un error de FileNotFound con el mensaje (" No se pudo encontrar el archivo 'C: \ Users \ Doug \ Documents \ XMLFile1 .xml '. ") Está buscando en la carpeta Mis documentos, pero el archivo XML se encuentra en la carpeta Proyectos de VS para ese proyecto. Establecí la propiedad "Copiar en directorio de salida" del archivo XML en "Copiar siempre". Cuando cambio el código para incluir la ruta completa al archivo XML, el código funciona.

Además, si incluyo el código anterior en una consola de Windows u otro tipo de proyecto, se ejecuta correctamente. Solo lo obtengo en Excel Addin. Lo anterior es válido para VSTO 2008/Excel 2003 y VSTO 2010/Excel 2010.

Respuesta

13

Cuando utiliza la ruta relativa, el directorio actual (Environment.CurrentDirectory) se utiliza para resolver esa ruta. En el caso de un complemento de VSTO, este se establece automáticamente en la carpeta de documentos del usuario. Sin embargo, para una aplicación de consola ese valor se establece en la misma carpeta que el ejecutable y es por eso que está experimentando comportamientos diferentes.

Si su archivo se implementará en la misma carpeta que su conjunto de complemento VSTO, puede usar (AppDomain.CurrentDomain.BaseDirectory) para compilar la ruta completa al archivo.

ejemplo, en C#:

string filename = "XMLFile1.xml"; 

string path = Path.Combine(
    AppDomain.CurrentDomain.BaseDirectory, 
    filename); 

XElement.Load(path); 
+0

João, muchas gracias. Eso funciona. –

+1

@ João, esto es brillante. No estoy seguro de cómo encontraste esta joya, ya que he estado Binging todo el día y no he podido encontrar una respuesta a este problema de VSTO. ¡Tu respuesta fue perfecta! ¡Muchas gracias! –

+0

Todas las soluciones de VSTO que utilicé usaron '' Environment.CurrentDirectory'' para obtener el directorio de trabajo, que siempre funcionó hasta ayer. Lo tomé por primera vez como un error de VS ya que es una variable de entorno relativa. Traté de cambiar el directorio de trabajo VS de muchas maneras ... sin éxito. Muchas gracias @ João –

1

También puede utilizar:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) 
Cuestiones relacionadas