web-dev-qa-db-fra.com

Obtenir le nom de l'assemblage en cours d'exécution à partir de la référence DLL en C #

Quel est le meilleur moyen d'obtenir le nom de l'application (i.e MyApplication.exe) de l'assembly en cours d'exécution à partir d'une bibliothèque de classes référencée en C #?

J'ai besoin d'ouvrir le fichier app.config de l'application pour récupérer des variables appSettings pour la DLL référencée.

35
Michael Kniskern

Si vous voulez obtenir le fichier de configuration de l'appdomain actuel, il vous suffit de:

ConfigurationManager.AppSettings....

(Cela nécessite une référence à System.Configuration of course).

Pour répondre à votre question, vous pouvez le faire comme l'a dit Ray (ou utiliser Assembly.GetExecutingAssembly().FullName) mais je pense que le problème est plus facilement résolu en utilisant ConfigurationManager.

18
Ben Scheirman

Pour obtenir la réponse au titre de la question:

// Full-name, e.g. MyApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
string exeAssembly = Assembly.GetEntryAssembly().FullName;

// or just the "Assembly name" part (e.g. "MyApplication")
string exeAssemblyName = Assembly.GetEntryAssembly().GetName().Name;

Comme mentionné par @Ben, puisque vous indiquez vouloir obtenir les informations de configuration, utilisez la classe ConfigurationManager.

50
Ray Hayes

Pour obtenir le nom exact sans version, etc., utilisez:

string appName = Assembly.GetEntryAssembly().GetName().Name;

Fonctionne avec .NET version 1.1 et ultérieure.

7
Aoi Karasu

Vous pouvez obtenir l'Assemblée à travers le type de classe ... 

typeof(MyClass).Assembly
7
Jaider

Vous ne devez jamais coupler vos bibliothèques à un consommateur (dans ce cas, une application Web, WinForm ou WCF). Si votre bibliothèque a besoin de paramètres de configuration, DONNEZ-la à la bibliothèque. 

Ne codez pas la bibliothèque pour extraire ces données du fichier de configuration d'un consommateur. Fournissez des constructeurs surchargés pour cela (c'est ce qu'ils sont). 

Si vous avez déjà examiné l'objet ConfigurationManager.AppSettings, il s'agit simplement d'une NameValueCollection. Créez donc un constructeur dans votre bibliothèque pour accepter une NameValueCollection et demandez à votre consommateur de DONNER ces données à la bibliothèque.

//Library
public class MyComponent
{
  //Constructor
  public MyComponent(NameValueCollection settings)
  {
     //do something with your settings now, like assign to a local collection
  }
}

//Consumer
class Program
{
  static void Main(string[] args)
  {
    MyComponent component = new MyComponent(ConfigurationManager.AppSettings);
  }
}
3

Si vous voulez lire (et afficher) le numéro de version:

  Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();
  AssemblyName assname = ass.GetName();

  Version ver=assname.Version;

Quelque part dans l'application (c'est-à-dire un bloc de titre dans un formulaire Windows)

 this.Text = "Your title    Version " + ver;
2
A Reynaldos

Si vous voulez le nom de l'EXE parent et non l'assembly DLL référencé, vous devez utiliser ceci:

Assembly.GetEntryAssembly().GetName().Name

Cela renverra le nom EXE (moins la partie .EXE).

Utiliser GetExecutingAssembly () n’est pas correct selon la question du premier opérateur (premier paragraphe!) Car il renverra le nom DLL.

0
James Harcourt

Pour le nom abrégé d'un assembly d'une instance de classe:

Me.GetType ().Assembly.GetName().Name
0
Gerardo Aguero