2012-10-29 3 views
2

J'essaie d'écrire un chemin relatif à partir d'un fichier, mais les seuls chemins relatifs que je peux obtenir proviennent du fichier d'application en cours d'exécution. Cela provoque des problèmes car NCrunch exécute son test à partir d'un répertoire différent, ce qui fait échouer tous mes tests car il ne trouve pas les fichiers relatifs à mon fichier de code.Obtention du répertoire en fonction de l'emplacement du fichier C#

Il est important que ce soit un chemin relatif car plusieurs personnes travaillent sur ce projet, donc les chemins absolus ne fonctionnent pas.

Y at-il un moyen de faire le chemin relatif au fichier .cs où le code est écrit?

jusqu'à présent, je me sers

private static readonly string MyDocumentsRoot =  Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     public static readonly string ApplicationRoot = MyDocumentsRoot + @"\Visual Studio 2012\Projects\"; 

mais vraiment besoin d'être un peu plus par rapport

+0

Si vous aimez une réponse accepter –

Répondre

3

La solution est bien documentée dans la documentation NCRUNCH:

Implicit File Dependencies

Les autres solutions, tôt ou tard, échouera. (J'ai eu des problèmes similaires avec MSTest, qui offre une solution similaire).

1

Vous pouvez essayer avec ce code - basé sur GetExecutingAssembly méthode

string path = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string directory= Path.GetDirectoryName(path); 

Ou

string path = System.Reflection.Assembly.GetAssembly(YourClass).Location; 
+0

Merci, mais GetExecutingAssembly ne permet pas d'arguments de sorte que cela est tout simplement de lancer une erreur –

+0

i mis à jour après, GetAssembly prendre lien argument: http://msdn.microsoft.com/fr-fr/ library/system.reflection.assembly.getassembly.aspx –

0

Vous pouvez utiliser str=Directory.getdirectory qui vous donnera le chemin de l'application (les dossiers jusqu'à Release ou Debug (où se trouve votre application) et l'enregistrer dans une chaîne (la méthode renvoie une chaîne). Après cela, vous pouvez utiliser la méthode str.replace(str1,str2) qui localise str1 et le remplace par str2. N'oubliez pas que \ dans une chaîne est \\ car \ est un caractère d'échappement. Si vous avez besoin d'aide pour les caractères d'échappement, faites-le moi savoir afin que je puisse vous aider.

0

Le documentation montre les chemins sont relatifs au fichier de projet:

Par exemple, vous pouvez spécifier les fichiers suivants à inclure:

SpecialConfiguration\ImportantConfigFile.config 
..\CustomBuild\**.* 
..\..\TestResources\Spreadsheets\*.xls 

Cela comprendrait un fichier individuel (ImportantConfigFile. config), le contenu entier du répertoire ..\CustomBuild, tous ses sous-répertoires et tous les fichiers .xls dans le répertoire ..\..\TestResources\Spreadsheets.

Tous les chemins de fichier doivent être spécifiés par rapport au chemin du fichier de projet sur le disque. Lorsque NCrunch crée un espace de travail, il organise automatiquement tous les fichiers dépendants afin qu'ils existent avec les mêmes chemins relatifs dans leur espace de travail que dans leur emplacement d'origine.

0

Je place généralement un ancien fichier ini-style où réside mon exécutable. Ici, je stocke les chemins absolus des fichiers et dossiers requis par l'application.Cela me permet également de configurer ces chemins différemment dans un environnement de production (sur le site des clients) plutôt que dans mon environnement de développement. Ayant juste une copie de ce fichier ini dans le dossier d'où NCrunch exécute les assemlies résoudrait le problème. Mon implémentation de fichier ini recherche tous les dossiers, en commençant par le dossier où réside l'exécutable, vers le dossier racine, jusqu'à ce qu'il trouve le fichier ini. Cela me permet d'avoir différents exécutables en utilisant un fichier ini commun. Par exemple. Si le fichier ini est placé dans le dossier bin, la version Debug et la version Release accèdent automatiquement au même fichier ini.

Questions connexes