Une meilleure façon d'obtenir le répertoire de base?
J'ai ce code pour charger un fichier de configuration et de lire toutes les valeurs et il fonctionne très bien lors de l'exécution de l'application, mais ne tient pas sur l'équipe de la ville parce que le domaine d'application de base du répertoire où le script de construction (psake) est démarré. Je sais que je peux changer de répertoire pour le construire dir avant d'exécuter les tests, mais j'ai pensé que c'est mieux de faire le chargement du fichier de configuration de travail en tout temps, peu importe.
XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, cfgFile));
Est-il un autre moyen pour obtenir le "BaseDirectory" qui fonctionne vraiment tout le temps? J'ai essayé de le ci-dessous 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. Mes solutions dans le répertoire de base est "C:\Project", le tout compilé les fichiers sont copiés "C:\Project\build". Maintenant, dans le psake script de compilation, j'ai 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 j'ai commenté l'évolution des répertoires qui rend le BaseDirectory l'emplacement du fichier build /solution au lieu du répertoire de construction, indépendamment de la façon dont j'essaie d'y accéder. Un peu déroutant si vous me demandez.
Mise à JOUR j'aimerais savoir si il est possible d'obtenir le répertoire de l'assemblée indépendamment de ce répertoire de l'application qui a commencé le domaine d'application est situé. Comment?
source d'informationauteur mhenrixon | 2010-07-02
Vous devez vous connecter pour publier un commentaire.
Par MSDN:
différentes façons d'obtenir le répertoire de base
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory()
//pas garanti pour fonctionner sur l'application MobileEnvironment.CurrentDirectory
//cela appelleDirectory.GetCurrentDirectory()
this.GetType().Assembly.Location
//Assembly.emplacementApplication.StartupPath
//pour windows forms appsApplication.ExecutablePath
//Application.StartupPath
Ainsi, il semble/semble que vous tentez d'obtenir le fichier de configuration pour une assemblée. Les éléments suivants doivent accomplir cette tâche en accédant à l'Emplacement de la propriété de l'assemblée et de l'utiliser pour récupérer le chemin d'accès de configuration:
Votre question est un peu floue. Je ne sais pas vraiment si c'est ce que vous voulez.
Je l'utilise généralement
AppDomain.CurrentDomain.BaseDirectory
Alternatives
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
Environment.CurrentDirectory
essayez celui-ci:
avez-vous essayé d'obtenir le nom de fichier du processus actuel de"MainModule?
Ou GetEntryAssembly()?
J'aime faire mes classes configurable - par exemple-ils obtenir le nom du dossier comme un paramètre de son constructeur.
Cela permet de tester avec différents fichiers de configuration.
Dans le code de test que nous utilisons:
C'est le testrun dossier, où tous les assemblages pour une série de tests sont copiés dans, avec le test des éléments de déploiement. Nous "déployer" notre unité de test des fichiers de configuration à l'exécution des tests de dossier - ce qui peut être spécifié dans le testrunconfig dialogue dans visual studio.
Pour notre code de production, nous passons
pour le constructeur, qui travaille pour nous.
comment sur:
Démarrage de l'Application chemin sera de retour le chemin où exe est conservé, nous allons diviser cette utilisation de "\" et obtenir le répertoire de base comme "C:" par exemple,