1135 votes

Comment puis-je obtenir le chemin de l'application dans une application console .NET ?

Comment trouver le chemin de l'application dans une application console ?

En Formulaires Windows je peux utiliser Application.StartupPath pour trouver le chemin actuel, mais cela ne semble pas être disponible dans une application console.

7 votes

Avez-vous installé .NET Framework sur la machine cible (Client, Développement) ? Si votre réponse est vraie ; Alors, vous pouvez ajouter une référence à System.Windows.Forms.dll et utiliser Application.StartupPath ! C'est le meilleur moyen si vous voulez éviter les exceptions futures !

0 votes

AppDomain.BaseDirectory est le répertoire de l'application. Soyez conscient que l'application peut se comporter différemment dans l'environnement VS et l'environnement Win. Mais AppDomain devrait être le même que application.path mais j'espère que ce n'est pas seulement pour IIS.

7voto

mark gamache Points 237

Je n'ai vu personne convertir le LocalPath fourni par la réflexion .Net Core en un chemin System.IO utilisable, alors voici ma version.

public static string GetApplicationRoot()
{
   var exePath = new Uri(System.Reflection.
   Assembly.GetExecutingAssembly().CodeBase).LocalPath;

   return new FileInfo(exePath).DirectoryName;

}

Cela renverra l'intégralité du C:\\xxx\\xxx chemin formaté vers l'endroit où se trouve votre code.

7voto

jmik Points 51

6voto

Herman Points 573

Assembly.GetEntryAssembly().Location o Assembly.GetExecutingAssembly().Location

Utiliser en combinaison avec System.IO.Path.GetDirectoryName() pour obtenir uniquement le répertoire.

Les chemins de GetEntryAssembly() y GetExecutingAssembly() peuvent être différents, même si dans la plupart des cas, le répertoire sera le même.

Avec GetEntryAssembly() vous devez être conscient que cela peut revenir null si le module d'entrée n'est pas géré (c'est-à-dire un exécutable C++ ou VB6). Dans ces cas, il est possible d'utiliser GetModuleFileName à partir de l'API Win32 :

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetModuleFileName(HandleRef hModule, StringBuilder buffer, int length);

6voto

developer747 Points 1762

J'utilise ceci si l'exe est censé être appelé en double cliquant dessus.

var thisPath = System.IO.Directory.GetCurrentDirectory();

6voto

dba Points 429

En VB.net

My.Application.Info.DirectoryPath

fonctionne pour moi (Type d'application : bibliothèque de classes). Je ne suis pas sûr pour le C#... Retourne le chemin d'accès sans le nom de fichier en tant que chaîne de caractères.

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