What is the best way to get the application name (i.e MyApplication.exe) of the executing assembly from a referenced class library in C#?
I need to open the application's app.config to retrieve some appSettings variables for the referenced DLL.
What is the best way to get the application name (i.e MyApplication.exe) of the executing assembly from a referenced class library in C#?
I need to open the application's app.config to retrieve some appSettings variables for the referenced DLL.
If you want to get the current appdomain's config file, then all you need to do is:
ConfigurationManager.AppSettings
....
(this requires a reference to System.Configuration of course).
To answer your question, you can do it as Ray said (or use Assembly.GetExecutingAssembly().FullName
) but I think the problem is easier solved using ConfigurationManager
.
You should never couple your libraries to a consumer (in this case Web, WinForm or WCF app). If your library needs configuration settings, then GIVE it to the library. Don't code the library to pull that data from a consumer's config file. Provide overloaded constructors for this (that's what they are for). If you've ever looked at the ConfigurationManager.AppSettings object, it is simply a NameValueCollection. So create a constructor in your library to accept a NameValueCollection and have your consumer GIVE that data to the library.
//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); } }
To get the exact name without versions, etc. use:
string appName = Assembly.GetEntryAssembly().GetName().Name;
Works with .NET v1.1 and later.