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


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

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


809
2018-05-07 23:05


origine


Réponses:


System.Reflection.Assembly.GetExecutingAssembly().Location1

Combinez cela avec System.IO.Path.GetDirectoryName si tout ce que vous voulez est le répertoire.

1Selon le commentaire de Mr.Mindor:
System.Reflection.Assembly.GetExecutingAssembly().Location renvoie l'emplacement où se trouve actuellement l'assembly en cours d'exécution, lequel peut ou non se trouver à l'emplacement de l'assembly lorsqu'il ne s'exécute pas. Dans le cas des assemblys de copie d'ombre, vous obtiendrez un chemin dans un répertoire temp. System.Reflection.Assembly.GetExecutingAssembly().CodeBase retournera le chemin 'permanent' de l'assemblage.


1035
2018-05-07 23:09



Vous pouvez utiliser le code suivant pour obtenir le répertoire d'application en cours.

AppDomain.CurrentDomain.BaseDirectory

361
2018-05-08 19:03



Vous avez deux options pour trouver le répertoire de l'application, que vous avez choisi dépendra de votre objectif.

// to get the location the assembly is executing from
//(not necessarily where the it normally resides on disk)
// in the case of the using shadow copies, for instance in NUnit tests, 
// this will be in a temp directory.
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;

//To get the location the assembly normally resides on disk or the install directory
string path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;

//once you have the path you get the directory with:
var directory = System.IO.Path.GetDirectoryName(path);

122
2017-10-14 18:27



Probablement un peu en retard mais cela vaut la peine d'être mentionné:

Environment.GetCommandLineArgs()[0];

Ou plus exactement pour obtenir juste le chemin du répertoire:

System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);

Modifier:

Beaucoup de gens ont fait remarquer que GetCommandLineArgs n'est pas garanti de retourner le nom du programme. Voir Le premier mot sur la ligne de commande est le nom du programme uniquement par convention. L'article indique que "Bien que très peu de programmes Windows utilisent cette bizarrerie (je ne suis pas au courant de moi-même)". Il est donc possible de "spoofer" GetCommandLineArgs, mais nous parlons d'une application console. Les applications de la console sont généralement rapides et sales. Cela correspond donc à ma philosophie KISS.


72
2018-05-21 13:27



Pour toute personne intéressée par les applications Web asp.net. Voici mes résultats de 3 méthodes différentes

protected void Application_Start(object sender, EventArgs e)
{
  string p1 = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
  string p2 = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
  string p3 = this.Server.MapPath("");
  Console.WriteLine("p1 = " + p1);
  Console.WriteLine("p2 = " + p2);
  Console.WriteLine("p3 = " + p3);
}

résultat

p1 = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\a897dd66\ec73ff95\assembly\dl3\ff65202d\29daade3_5e84cc01
p2 = C:\inetpub\SBSPortal_staging\
p3 = C:\inetpub\SBSPortal_staging

l'application fonctionne physiquement à partir de "C: \ inetpub \ SBSPortal_staging", donc la première solution n'est certainement pas appropriée pour les applications web.


38
2017-10-06 19:42



La réponse ci-dessus était de 90% de ce dont j'avais besoin, mais j'ai retourné un Uri au lieu d'un chemin régulier pour moi.

Comme expliqué dans le message sur les forums MSDN, Comment convertir un chemin URI en chemin de fichier normal?, J'ai utilisé ce qui suit:

// Get normal filepath of this assembly's permanent directory
var path = new Uri(
    System.IO.Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
    ).LocalPath;

34
2018-04-13 20:20



Vous cherchez peut-être à faire ceci:

System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

26
2018-05-07 23:10



vous pouvez utiliser celui-ci à la place.

System.Environment.CurrentDirectory

18
2017-11-15 20:06