27 votes

Obtenir le nom de l'assemblage exécuté à partir de la DLL référencée en C#

Quelle est la meilleure façon d'obtenir le nom de l'application (i.e. MyApplication.exe) de l'assemblage exécuté à partir d'une bibliothèque de classe référencée en C# ?

Je dois ouvrir le fichier app.config de l'application pour récupérer certaines variables appSettings pour la DLL référencée.

37voto

Ray Hayes Points 9819

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 indiqué par @Ben, puisque vous souhaitez obtenir les informations de configuration, utilisez la commande ConfigurationManager classe.

17voto

Ben Scheirman Points 23590

Si vous voulez obtenir le fichier de configuration de l'appdomain en cours, il vous suffit de faire ce qui suit :

ConfigurationManager.AppSettings ....

(ce qui nécessite une référence à System.Configuration bien sûr).

Pour répondre à votre question, vous pouvez procéder comme Ray l'a indiqué (ou utiliser la fonction Assembly.GetExecutingAssembly().FullName ) mais je pense que le problème est plus facile à résoudre en utilisant ConfigurationManager .

6voto

Aoi Karasu Points 2681

Pour obtenir le nom exact sans les versions, etc. utilisez :

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

Fonctionne avec .NET v1.1 et plus.

5voto

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-les à la bibliothèque.

Ne codez pas la bibliothèque pour qu'elle récupère ces données dans le fichier de configuration d'un consommateur. Fournissez des constructeurs surchargés pour cela (c'est à cela qu'ils servent).

Si vous avez déjà regardé le ConfigurationManager.AppSettings il s'agit simplement d'un objet NameValueCollection . Créez donc un constructeur dans votre bibliothèque pour accepter un fichier 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);
  }
}

5voto

James Harcourt Points 4906

Si vous souhaitez obtenir le nom de l'EXE parent et non celui de l'assemblage DLL référencé, vous devrez utiliser ceci :

Assembly.GetEntryAssembly().GetName().Name

Cela renverra le nom de l'EXE (sans la partie .EXE).

L'utilisation de GetExecutingAssembly() n'est pas adaptée à la question de l'OP (premier paragraphe) car elle renvoie le nom de la DLL.

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