90 votes

Comment obtenir Bin Path ?

J'ai besoin de connaître le chemin de la benne de l'assemblage en cours d'exécution. Comment l'obtenir ? J'ai un dossier Plugins dans Bin/Debug et j'ai besoin de connaître l'emplacement de l'assemblage.

0 votes

Pourquoi en avez-vous besoin ? Pourquoi l'application ne dispose-t-elle pas déjà du chemin, puisqu'elle semble trouver l'assemblage sans problème ? À quoi ressemble votre déploiement ?

133voto

Kevin Points 57797

Voici comment obtenir le chemin d'exécution de l'application :

var path = System.IO.Path.GetDirectoryName( 
      System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

MSDN a une référence complète sur comment déterminer le chemin d'accès de l'application en cours d'exécution .

Notez que la valeur dans path sera sous la forme de file:\c:\path\to\bin\folder Ainsi, avant d'utiliser le chemin d'accès, vous devrez peut-être supprimer l'attribut file:\ à l'avant. Par exemple :

path = path.Substring(6);

1 votes

Bonjour, merci pour votre réponse rapide. Comment se fait-il que si je code le chemin en dur, il le trouve et que si je fais le code suivant, il ne le trouve pas. La seule différence que je peux voir est le " \\ " . Est-ce que je rate quelque chose ? var binpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) ; var fullpath = Path.Combine(binpath, folderName) ; if (!Directory.Exists(fullpath)) return ;

6 votes

Dans mon cas, le problème était que la fonction System.IO.Path.GetDirectoryName() renvoie un chemin avec un "file : \\ "au début. Je l'ai simplement retiré de la chaîne et tout a fonctionné.

0 votes

Cela semble aller dans le répertoire de sortie

74voto

D.K. Mulligan Points 2272

Vous pourriez faire ceci

    Assembly asm = Assembly.GetExecutingAssembly();
    string path = System.IO.Path.GetDirectoryName(asm.Location);

10 votes

Ou ça ! System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembl‌​y().Location)

11 votes

Cela ne semble pas fonctionner si vous exécutez un test NUnit. Dans ce cas, le chemin d'accès pointe vers le répertoire TEMP.

0 votes

Vous ne voulez pas l'assemblée d'entrée ?

36voto

Thorgeir Points 11

C'est ce que j'avais l'habitude d'accomplir jusqu'ici :

System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, System.AppDomain.CurrentDomain.RelativeSearchPath ?? "");

3 votes

Cela a fonctionné parfaitement dans l'hébergement IIS et Winform, merci.

0 votes

Merci ! Cela semble fonctionner pour l'application ASP.NET et l'application console. Dans asp.net RelativeSearchPath contient le dossier "bin" actuel et dans l'application console c'est null y BaseDirectory contient le chemin réel du "bin".

8voto

James Curran Points 55356
var assemblyPath = Assembly.GetExecutingAssembly().CodeBase;

7voto

Turowicz Points 1120
Path.GetDirectoryName(Application.ExecutablePath)

par exemple, la valeur :

C:\Projects\ConsoleApplication1\bin\Debug

10 votes

Remarque : Cette solution ne concerne que Windows.Forms.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X