2012-06-27 11 views
10

ok, ecco la domanda. Ho due progetti uno è C# Console e altro è la libreria di classi. Sto accedendo/chiamando il metodo di libreria di classi dall'app console. C'è una cartella chiamata File all'interno del progetto della libreria di classi.Come ottenere il percorso della directory di progetto corrente utilizzando C#

ho bisogno di ottenere il percorso della cartella dei file della biblioteca di classe, ma ogni volta che uso

System.IO.Directory.GetCurrentDirectory(); 

e

Environment.CurrentDirectory; 

mi sta dando percorso del progetto console che sto usando per chiamare il metodo.

metodi di cui sopra mi stanno dando percorso come

C:\\ConsolePro\\bin\\Debug 

ma ho bisogno del percorso di progetto di libreria di classi

C:\\ClassLibPro\\bin\\Debug 

prega di avvisare

+2

FYI si potrà mai ottenere il percorso della directory DLL come Visua l Studio copierà le dipendenze dalla loro posizione originale (ClassLibPro) nella cartella bin/debug del progetto (Console Pro). Non c'è modo di risalire a questo in fase di esecuzione. – tsells

+0

Perché hai bisogno del percorso del progetto? –

risposta

3

Credo che il problema è:

Dal momento che il progetto di console ha riferimento al file DLL che sta usando DLL per chiamare qualsiasi metodo. In questo momento viene restituita la posizione della DLL della libreria di classi del projct che si trova nella directory bin del progetto della console e non conosce la posizione fisica del progetto della libreria di classi.

quindi essenzialmente restituisce lo stesso percorso del progetto. Dovrò spostare entrambi i progetti nella stessa directory per risolvere questo problema.

1

si dovrebbe essere in grado di utilizzare Directory.GetParent(Directory.GetCurrentDirectory()) un paio di volte per ottenere directory di livello superiore e quindi aggiungere il percorso della directory lib alla fine di quello.

+0

No, questa non è la risposta. Devo sapere come posso ottenere il percorso del progetto corrente in cui si trova il mio file. Per favore leggi di nuovo la domanda! – Learner

3

Se si carica la libreria di classi da un altro assieme.

string Path = System.Reflection.Assembly.GetAssembly(typeof({LibraryClassName})).Location; 

string PathToClassLibPro = Path.GetDirectoryName(Path); 

Sostituire {LibraryClassName} con il nome della classe della vostra libreria.

+0

Questo non funziona. Path sta arrivando come la DLL che si trova nel progetto della console. – Learner

+0

Come definire il tipo di assieme al posto di {assembly}. Sto usando come questa stringa Path = System.Reflection.Assembly.GetExecutingAssembly(). Location; – Learner

+0

Ho usato il nome della classe e non ha funzionato troppo! – Learner

7

Una volta che il codice è stato compilato e in esecuzione, "Percorso del progetto" non ha alcun significato. Tutto quello che puoi determinare sono i percorsi dei file degli assembly compilati. E puoi solo fare quello che ti stai chiedendo se il tuo progetto della Console fa riferimento direttamente alla DLL della "libreria di classi", piuttosto che tramite un riferimento al progetto.

Quindi, è possibile utilizzare Reflection per ottenere percorsi di montaggio simili;

string path = Assembly.GetAssembly(typeof (SomeClassInOtherProject)).Location; 
+0

Spiacente, questo codice non ha funzionato neanche – Learner

0

Vorrei raccomandare una delle due opzioni.

  1. Se i file sono piccoli li includono nella libreria di classi e li Stream per una posizione temporanea in caso di necessità

  2. Altra opzione è quella di copiare i file durante la compilazione nella directory di output e li usa che modo. In caso di più progetti condivisi, è meglio avere una cartella bin comune in cui copiare gli assembly ed eseguire da quella posizione.

2

spero capisco u corretly:

Path.GetDirectoryName(typeof(Foo.MyFooClass).Assembly.Location); 
0

Nonostante i cant trovare una buona soluzione io uso questo trucco: finché si vuole tornare al tuo percorso ideale u dovrebbe aggiungere Directory.GetParent() al posto di...

Directory.GetParent(...(Directory.GetParent(Directory.GetCurrentDirectory()).ToString()...).ToString() 
Problemi correlati