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.

18voto

J'ai utilisé ce code et j'ai obtenu la solution.

AppDomain.CurrentDomain.BaseDirectory

15voto

user2126375 Points 179

La ligne suivante vous donnera un chemin d'accès à l'application :

var applicationPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)

La solution ci-dessus fonctionne correctement dans les situations suivantes :

  • application simple
  • dans un autre domaine où Assembly.GetEntryAssembly() retournerait null
  • La DLL est chargée depuis les ressources embarquées sous la forme d'un tableau d'octets et chargée dans l'AppDomain sous Assembly.Load(byteArrayOfEmbeddedDll).
  • avec Mono's mkbundle les liasses (aucune autre méthode ne fonctionne)

9voto

fruggiero Points 695

Vous pouvez simplement ajouter aux références de votre projet System.Windows.Forms et ensuite utiliser le System.Windows.Forms.Application.StartupPath comme d'habitude .

Il n'est donc pas nécessaire de recourir à des méthodes plus compliquées ou d'utiliser la réflexion.

8voto

user2346593 Points 1

J'ai utilisé

System.AppDomain.CurrentDomain.BaseDirectory

lorsque je veux trouver un chemin relatif à un dossier d'applications. Cela fonctionne à la fois pour les applications ASP.Net et winform. Elle ne nécessite pas non plus de référence aux assemblages System.Web.

7voto

user3596865 Points 11

Je veux dire, pourquoi pas une méthode p/invoke ?

    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Text;
    public class AppInfo
    {
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = false)]
            private static extern int GetModuleFileName(HandleRef hModule, StringBuilder buffer, int length);
            private static HandleRef NullHandleRef = new HandleRef(null, IntPtr.Zero);
            public static string StartupPath
            {
                get
                {
                    StringBuilder stringBuilder = new StringBuilder(260);
                    GetModuleFileName(NullHandleRef, stringBuilder, stringBuilder.Capacity);
                    return Path.GetDirectoryName(stringBuilder.ToString());
                }
            }
    }

Vous l'utiliserez comme l'Application.StartupPath :

    Console.WriteLine("The path to this executable is: " + AppInfo.StartupPath + "\\" + System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe");

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