Ho questo codice per caricare un file di configurazione e leggere tutti i valori e funziona bene quando si esegue l'applicazione, ma naturalmente fallisce su team city perché la directory di base dell'appdomain è dove viene avviato lo script di build (psake). So che posso cambiare la directory nella directory di compilazione prima di eseguire i test, ma ho pensato che fosse meglio fare in modo che il caricamento del file di configurazione funzionasse sempre a prescindere.Un modo migliore per ottenere la directory di base?
XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, cfgFile));
C'è un altro modo per ottenere "BaseDirectory" che funzioni davvero tutte le volte? Ho provato la sotto così con gli stessi risultati:
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
XDocument.Load(Path.Combine(path, cfgFile));
EDIT 1 Il problema è il seguente. La mia directory di base delle soluzioni è "C: \ Project", tutti i file compilati vengono copiati in "C: \ Project \ build". Ora nello script psake accumulo Ho il seguente codice:
task Test -depends PrepareTests {
try {
#$old = pwd
#cd $build_dir
&$mspec $mspec_projects --teamcity
#cd $old
}
catch {
&echo "Error starting test runner"
Exit 1;
}
}
Come potete vedere ho commentato il cambio di directory che rende la BaseDirectory la posizione del file build/soluzione invece che la cartella di generazione a prescindere da come Provo ad accedervi. Un po 'di confusione se me lo chiedi.
UPDATE Mi piace davvero sapere se è possibile ottenere la directory dell'assembly indipendentemente dalla directory in cui si trova l'applicazione che ha avviato il dominio dell'app. Come?
Cosa vuol dire "directory base"? Dove si trova il file di configurazione in relazione all'assembly? Il secondo esempio dovrebbe funzionare se il file di configurazione si trova nella stessa directory della DLL ... –
Quindi si desidera la directory in cui si trova l'exe? – Craig
@craig - Sì, questo è quello che sto dopo – mhenrixon