简体   繁体   中英

Get executing assembly name from referenced DLL in C#

What is the best way to get the application name (ie 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.

To get the answer to the question title:

// 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;

As mentioned by @Ben, since you mention wanting to get the configuration information, use the ConfigurationManager class.

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 .

您可以通过类类型获取程序集...

typeof(MyClass).Assembly

To get the exact name without versions, etc. use:

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

Works with .NET v1.1 and later.

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);
  }
}

If you want to read (and display) version number:

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

  Version ver=assname.Version;

Somewhere in application (ie Title block in a Windows form)

 this.Text = "Your title    Version " + ver;

If you want the name of the parent EXE and not the referenced DLL assembly - you will need to use this:

Assembly.GetEntryAssembly().GetName().Name

This will return the EXE name (minus the .EXE part).

Using GetExecutingAssembly() is not right as per the OP's question (first paragraph of it!) as it will return the DLL name.

对于类实例中程序集的简称:

Me.GetType ().Assembly.GetName().Name

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM