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.
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
.
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
.
Pour obtenir le nom exact sans version, etc., utilisez:
string appName = Assembly.GetEntryAssembly().GetName().Name;
Fonctionne avec .NET version 1.1 et ultérieure.
Vous pouvez obtenir l'Assemblée à travers le type de classe ...
typeof(MyClass).Assembly
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);
}
}
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;
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.
Pour le nom abrégé d'un assembly d'une instance de classe:
Me.GetType ().Assembly.GetName().Name