2009-09-09 10 views
6

Penso che questa domanda potrebbe essere banale per la maggior parte di voi ma in qualche modo non riesco a trovare la risposta ... quindi, ho una soluzione di Visual Studio 2008 foo e una barra di progetto in questa soluzione. Nel mio bar-Progetto Ho una directory chiamata Baz, sembra che questo:C# file di apertura in una soluzione

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

ora voglio aprire il mio file "asd" nel bar-progetto, ma hanno bisogno del percorso esatto a "file di asd" , come posso trovarlo? Ho provato semplicemente "baz \ as" ma non funziona.

Grazie!

J

risposta

2

Se vuoi dire aperta in fase di esecuzione, il programma viene eseguito in realtà in bar \ bin \ debug (o la barra \ bin \ release), quindi è necessario tenere conto di questo.

genere farò qualcosa di simile:

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

Questo non funzionerà al di fuori di Visual Studio se il file non viene copiato nella directory di output. – user7116

+0

Per la modalità di rilascio, il mio installer copia tutti i file necessari per il programma. Non utilizzo l'installer integrato (utilizzo NSIS). Quella richiede che il file venga contrassegnato come contenuto per essere raccolto? –

+0

Sì, l'installatore ha bisogno di loro come contenuto e di essere copiato. – user7116

9

Si vuole aprire il file in bar -project in fase di esecuzione in un'applicazione C#? Ci sono alcuni modi per realizzare questo, e ti darò il più facile.

  1. Vai agli Proprietà per asd in Esplora soluzioni
  2. Impostare Operazione di generazione a Content
  3. Impostare Copia nella directory di output come Copy always (o Copy if newer)

Non puoi gallina riferimento il file come segue nel vostro C# (supponendo che il programma non cambia la directory di lavoro corrente dalla directory eseguibile):

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

Gli altri modi coinvolgono using embedded resources, che non è la più succinta di soluzioni .

+0

Copia questo tipo di file nella directory di output ti lascia con due copie su disco. Questo va bene se i file sono piccoli e pochi. –

+1

Sono d'accordo, ma è il più semplice. Indipendentemente da ciò, l'incorporamento della risorsa anziché lasciarlo su disco occupa ancora spazio. – user7116

+1

Non copio o non incorporo durante il debug, ma lascia i file dove sono. Per le build di rilascio, il mio programma di installazione (utilizzo NSIS) è responsabile dell'installazione dei file richiesti sul computer di destinazione. –

2

La posizione relativa del file è nella directory della soluzione. Così, per aprirla nel VS IDE, è possibile digitare nella finestra di comando o la casella di testo Trova sulla barra degli strumenti standard (Ctrl-D):

>open bar\baz\asd 

Se si vuole farlo in fase di esecuzione, è necessario distribuisci i file sorgente con la tua applicazione, poiché nulla garantisce che verrà eseguito ovunque vicino all'albero delle soluzioni.

Se si desidera eseguire da un componente aggiuntivo VS, sono sicuro che esiste una classe che rappresenta la soluzione, che è possibile utilizzare per enumerare i progetti al suo interno e quindi enumerare le voci del file nel progetto della barra.

0

Potrebbe essere meglio aggiungere un semplice Target nel file Build (file di progetto - csproj per C#).Aprire il file csproj in modalità testo e aggiungere:


< di destinazione Name = "AfterBuild" > < Copia SourceFiles = "<SourceFileLocationRelativeToPrjFile> \ <SourceFileName> "DestinationFiles =" <SourceFileName>" />
</target >

MS Build si occuperà di copiare il file nel posto giusto, ovvero quella giusta, indipendentemente dalla configurazione (debug/release).

Se sei interessato anche all'editoria, dovrai fare un ulteriore sforzo, ma suppongo che non lo stia chiedendo ora, quindi, sarà semplice.