Existe-t-il un moyen d'obtenir le chemin de l'assemblage dans lequel réside le code actuel ? Je ne veux pas le chemin de l'assemblage appelant, seulement celui qui contient le code.
En fait, mon test unitaire doit lire des fichiers de test xml qui sont situés relativement à la dll. Je veux que le chemin soit toujours résolu correctement, que la dll de test soit exécutée à partir de TestDriven.NET, de l'interface graphique MbUnit ou d'un autre outil.
Modifier : Les gens semblent mal comprendre ce que je demande.
Ma bibliothèque de test est située dans say
C:\projects\myapplication\daotests\bin\Debug\daotests.dll
et je voudrais obtenir ce chemin :
C:\projects\myapplication\daotests\bin\Debug\
Les trois suggestions faites jusqu'à présent me font échouer lorsque j'exécute le programme à partir de la Gui MbUnit :
-
Environment.CurrentDirectory
donne c : \Program Fichiers \MbUnit -
System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location
donne C:\Documents et Paramètres \george\Local Paramètres \Temp\ .... \DaoTests.dll -
System.Reflection.Assembly.GetExecutingAssembly().Location
donne la même chose que le précédent.
118 votes
Voici votre solution : var dir = AppDomain.CurrentDomain.BaseDirectory ;
7 votes
Cela devrait être la solution acceptée. AppDomain.CurrentDomain.BaseDirectory est l'approche correcte.
0 votes
Voir aussi : trouver-mon-exécutable principal-path-utilisant-assembly-vs-appdomaine
2 votes
Je suis venu ici à la recherche d'une solution pour un paquet nuget pour lire un fichier JSON à partir de son répertoire pacakge. Il semble que lorsqu'un paquet nuget est exécuté, le "AppDomain.CurrentDomain.BaseDirectory" pointe vers le répertoire des projets en cours, et non vers le répertoire du paquet nuget. Aucun de ces éléments ne semble cibler correctement le répertoire du paquet nuget.
0 votes
@Lucas non, car ce n'est pas le sujet de la question (en fait, quand elle a été posée, nuget n'existait pas). N'hésitez pas à créer une nouvelle question et à m'y envoyer, mais je peux vous dire dès maintenant que c'est impossible dans la plupart des cas. Pour la plupart des projets, le répertoire nuget est
packages
à côté du fichier sln. MAIS lorsque vous compilez et distribuez des choses, il n'y a pas de fichier sln et pas de répertoire de paquets. Pendant la compilation, les choses qui sont nécessaires (mais pas tout) sont copiées dans le répertoire bin. Votre meilleur pari est d'utiliser un script postbuild pour copier le fichier que vous voulez.0 votes
Pour ceux qui lisent ces commentaires en croyant
AppDomain.CurrentDomain.BaseDirectory
est la bonne solution, veuillez vous référer à ce commentaire qui offre une meilleure solution.