J'ai ce code pour charger un fichier de configuration et lire toutes les valeurs. Il fonctionne correctement lors de l'exécution de l'application mais échoue bien sur city city car le répertoire de base de l'appdomain est le script de démarrage. Je sais que je peux changer de répertoire dans le répertoire de construction avant d'exécuter les tests, mais j'ai pensé qu'il est préférable de charger le fichier de configuration à tout moment.Meilleure façon d'obtenir le répertoire de base?
XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, cfgFile));
Y at-il une autre façon d'obtenir le « BaseDirectory » qui fonctionne vraiment tout le temps? J'ai essayé le ci-dessous et avec les mêmes résultats:
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
XDocument.Load(Path.Combine(path, cfgFile));
EDIT 1 Le problème est le suivant. Le répertoire de base de mes solutions est "C: \ Project", tous les fichiers compilés sont copiés dans "C: \ Project \ build". Maintenant, dans le script de construction de psake Je le code suivant:
task Test -depends PrepareTests {
try {
#$old = pwd
#cd $build_dir
&$mspec $mspec_projects --teamcity
#cd $old
}
catch {
&echo "Error starting test runner"
Exit 1;
}
}
Comme vous pouvez le voir, je commentais le changement des répertoires qui rend le BaseDirectory l'emplacement du fichier de construction/solution au lieu du répertoire de construction, peu importe comment J'essaie d'y accéder. Un peu déroutant si vous me demandez.
MISE À JOUR J'aime vraiment savoir s'il est possible d'obtenir le répertoire de l'assembly quel que soit le répertoire dans lequel se trouve l'application qui a démarré le domaine de l'application. Comment?
Que voulez-vous dire "répertoire de base"? Où se trouve le fichier de configuration par rapport à l'assemblage? Votre deuxième exemple devrait fonctionner si le fichier de configuration est dans le même répertoire que la DLL ... –
Ajouté plus d'infos – mhenrixon
Vous voulez donc le répertoire où se trouve le fichier .exe? – Craig