2009-09-09 9 views
6

Creo que esta pregunta puede ser trivial para la mayoría de ustedes, pero de alguna manera no puedo encontrar la respuesta ... entonces, tengo una solución Visual Studio 2008 foo y una barra de proyectos en esta solución. En mi bar-proyecto en el que tengo un directorio llamado Baz, que se ve así:C# archivo de apertura en una solución

foo dir 
| 
+-> bar dir 
     | 
     +-> baz dir 
      | 
      +-> asd file 

ahora quiero abrir mi "archivo ASD" en la barra-proyecto, pero necesita la ruta exacta a "archivo ASD" , ¿cómo puedo encontrarlo? Intenté simplemente "baz \ asd" pero no funciona.

Gracias!

J

Respuesta

2

Si se refiere abierto en tiempo de ejecución, el programa realmente funciona en la barra \ bin \ debug (o barra \ bin \ release), por lo que necesita para dar cuenta de eso.

Normalmente voy a hacer algo como:

#if DEBUG 
filename = @"..\..\baz\asd"; 
#else 
filename = @"baz\asd"; 
#endif 
+0

Esto no va a funcionar fuera de Visual Studio si el archivo no se copia en el directorio de salida. – user7116

+0

Para el modo de lanzamiento, mi instalador copia todos los archivos que el programa necesita. No uso el instalador incorporado (uso NSIS). ¿Requiere eso que el archivo se marque como contenido para que se recoja? –

+0

Sí, el instalador los necesita como contenido y para ser copiado. – user7116

9

que desea abrir el archivo en bar -project en tiempo de ejecución en una aplicación de C#? Hay algunas maneras de lograr esto, y te daré la más fácil.

  1. Ir a los Propiedades para asd en el Explorador de Solución
  2. Establecer Acción de generación a Content
  3. Establecer Copiar al Directorio de salida como Copy always (o Copy if newer)

No puedes Referencia gallina el archivo de la siguiente manera en su C# (asumiendo que su programa no cambia el directorio de trabajo actual de distancia del Directorio Ejecutable):

using (StreamReader reader = new StreamReader(@"baz\asd")) 
{ 
    // ... 
} 

Las otras formas implican using embedded resources, que no es la más sucinta de soluciones .

+0

Copiar este tipo de archivo en el directorio de salida le deja dos copias en el disco. Esto está bien si los archivos son pequeños y pocos. –

+1

Estoy de acuerdo, pero es el más fácil. Independientemente, incrustar el recurso en lugar de dejarlo en el disco aún ocupa espacio. – user7116

+1

No copio o incrusto durante la depuración, simplemente deje los archivos donde están. Para las versiones de lanzamiento, mi instalador (yo uso NSIS) es responsable de instalar los archivos necesarios en la máquina de destino. –

2

La ubicación relativa del archivo es para el directorio de solución. Por lo tanto, para abrirlo en el IDE de VS, puede escribir en la ventana de comandos o el Buscar cuadro de texto en la barra de herramientas estándar (Ctrl-D):

>open bar\baz\asd 

Si desea hacerlo en tiempo de ejecución, es necesario distribuya los archivos fuente con su aplicación, ya que nada garantiza que se ejecutará en cualquier lugar cerca del árbol de soluciones.

Si desea hacerlo desde un complemento VS, estoy seguro de que hay una clase que representa la solución, que puede usar para enumerar los proyectos que contiene y luego enumerar las entradas del archivo en el proyecto de la barra.

0

Podría ser mejor agregar un objetivo simple en el archivo de compilación (archivo de proyecto - csproj para C#).archivo csproj abierto en modo texto y añadir:


< Target Name = "AfterBuild" > < Copia sourcefiles = "<SourceFileLocationRelativeToPrjFile> \ <SourceFileName> "DestinationFiles =" <SourceFileName>" />
</Target >

MS Build se encargará de copiar su archivo en el lugar correcto, esa es la carpeta correcta sin importar cuál sea su configuración (depuración/versión).

Si usted está interesado en publicar así, tendrá que ir un paso más, pero supongo, que no está pidiendo ahora que - así, a mantener la sencillez.

Cuestiones relacionadas