2009-09-02 15 views
13

Come è possibile trovare la directory corrente per un'applicazione .NET in esecuzione nel debugger di Visual Studio?Ricerca della directory corrente durante la sessione di debug di Visual Studio?

Aggiornamento 1. Per essere chiari: non voglio cambiare il codice o ottenere informazioni nel programma stesso - Voglio solo ottenere informazioni sull'applicazione correntemente in esecuzione debug.

Durante il debug di un'applicazione .NET Windows Forms (VB.NET mista e C#) Io non ero sicuro dal quale la posizione di un file XML veniva letta da . Mi aspettavo che la directory corrente fosse la directory dell'applicazione . Tuttavia, utilizzando Process Explorer, proprietà per il risultato processo in:

D: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \

(click destro sul processo/proprietà/scheda Immagine/directory corrente).

Passando il cursore sul processo nella vista principale di Process Explorer rivelato un risultato diverso (vedi sotto per una schermata):

D: \ dproj \ DTASCall \ DTASuperCharge \ bin \

Che cosa è corretto?

Avvio dei standalone applicazione visualizza la directory corrente previsto,

D: \ dproj \ DTASCall \ DTASuperCharge \ bin \

nella finestra delle proprietà di processo Process Explorer.


commentata screen-shot di Process Explorer:

Alt text http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

risposta

4

All'interno del codice, chiamare la funzione

System.IO.Directory.GetCurrentDirectory() 

Per impostazione predefinita, a meno che non hai cambiato le proprietà di debug di il tuo progetto, la directory corrente inizierà come la directory bin \ Debug del tuo progetto (da dove viene eseguito .exe).

+0

Cosa intendi per programma non in esecuzione? Il programma è stato fermato a un punto di interruzione quando è stata scattata la schermata. –

+0

Hmmm, capisco cosa intendi. Ho sbagliato su .vshost: ho appena controllato la stessa cosa e procexp traccia la mia attuale directory di lavoro senza problemi. Provate a confrontare l'output di System.IO.Directory.GetCurrentDirectory() - con le impostazioni di progetto predefinite questa dovrebbe essere la directory bin \ Debug della vostra applicazione. Se il file XML che si sta tentando di leggere è un elemento di progetto, assicurarsi di impostare la proprietà Azione di compilazione su "Contenuto" e la proprietà Copia su directory di output in modo appropriato. Potrebbe anche valere la pena leggere dalla directory principale dell'applicazione anziché dalla directory corrente. – Richard

+0

Il campo "Directory di lavoro" nella pagina Debug è vuoto. Ma nella pagina Compile il campo "Crea percorso di output" contiene "bin \". Dovrebbe essere vuoto? Questo progetto è stato creato da Visual Studio nel 2003 e da allora ha attraversato due aggiornamenti di Visual Studio. Attualmente l'applicazione inizia dalla directory bin, non da bin/Debug –

22

In Visual Studio, sotto le impostazioni del progetto nella scheda debug, è possibile impostare la "Directory di lavoro" se lo si desidera.

Per determinare la directory di lavoro corrente nel codice o nella finestra immediata in un punto di interruzione, provare

System.IO.Directory.GetCurrentDirectory() 
+1

Per la finestra immediata: non è "Debug.Print (System.IO.Directory.GetCurrentDirectory())"? –

+2

Alternativa alla Finestra Immediata: menu Debug/Quickwatch//Premere Rivalutare. Oppure inserisci l'ultima riga della colonna Nome di una normale finestra di controllo, seguita dal tasto Invio. –

+4

o nella finestra immediata, si può sempre fare "? System.IO.Directory.GetCurrentDirectory()" –

-3

Il modo migliore è quello di eseguire l'applicazione in WinDbg (il debugger di Windows), quindi connettersi al processo ed eseguire il comando !handle. Ogni file aperto avrà un handle associato.Scaricando tutti gli handle per il processo corrispondente, verrà visualizzato il percorso file corrispondente.

Ecco un esempio:

!handle 0 f process-id 

Sostituire il processo-id con il valore del processo di identificazione. Al posto dell'id del processo è inoltre possibile utilizzare l'indirizzo del processo. Se questo non mostra l'oggetto file, l'handle del file è già stato chiuso. In questo caso è necessario tracciare le maniglie. Questo può essere fatto con il comando !htrace.

+0

Il post di Philip Rieck è la risposta corretta: "System.IO.Directory.GetCurrentDirectory()" –

Problemi correlati