web-dev-qa-db-fra.com

Quel est le meilleur moyen d’obtenir le chemin d’exécution en .NET?

Du programme a.exe situé dans c:/dir, je dois ouvrir le fichier texte c: /dir/text.txt. Je ne sais pas où a.exe pourrait être situé, mais text.txt sera toujours dans le même chemin. Comment obtenir le nom de l'assembly en cours d'exécution de l'intérieur pour se programmer afin que je puisse accéder au fichier texte?

EDIT: Et si a.exe est un service Windows? Il n'a pas d'application car ce n'est pas une application Windows.

Merci d'avance.

62
pistacchio

J'accède généralement au répertoire contenant le fichier .exe de mon application avec:

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
124
Tim S. Van Haren
string exePath = Application.ExecutablePath;
string startupPath = Application.StartupPath;

EDIT - Sans utiliser l'objet d'application:

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

Voir ici pour plus d'informations:

http://msdn.Microsoft.com/en-us/library/aa457089.aspx

12
Winston Smith
4
Tommy Carlier

Obtenez l'assemblage qui vous intéresse (par exemple, assigné à une variable System.Reflection.Assembly a]):

  • System.Reflection.Assembly.GetEntryAssembly(), ou
  • typeof(X).Assembly pour une classe X qui se trouve dans l'assemblage qui vous intéresse (pour Windows Forms, vous pouvez utiliser typeof(Program))

Ensuite, obtenez le chemin d’où le fichier à partir duquel cet Assembly a a été chargé:

  • System.IO.Path.GetDirectoryName(a.Location)

L'objet Application à partir d'une application Windows Forms est également une possibilité, comme expliqué dans d'autres réponses.

4
peSHIr

l'utilisation de la réponse peSHlr a également bien fonctionné lors des tests dans NUnit.

var thisType = typeof(MyCustomClass);

var codeLocation = Path.GetDirectoryName(thisType.Assembly.Location);

var codeLocationPath = Path.GetDirectoryName(codeLocation);

var appConfigPath = Path.Combine(codeLocationPath, "AppConfig");
0
C0r3yh

En VB.NET, nous pouvons l'obtenir de la manière suivante:

Assembly.GetEntryAssembly.Location

0
maks