从C#中引用的DLL执行程序集名称

从C#中引用的类库中获取正在执行的程序集的应用程序名称(即MyApplication.exe)的最佳方法是什么?

我需要打开应用程序的app.config来检索引用的DLL的一些appSettingsvariables。

如果你想获得当前appdomain的configuration文件,那么你所需要做的就是:

ConfigurationManager.AppSettings ….

(这当然需要参考System.Configuration)。

要回答你的问题,你可以这样做,因为雷说(或使用Assembly.GetExecutingAssembly().FullName ),但我认为这个问题更容易使用ConfigurationManager解决。

要获得问题标题的答案:

 // Full-name, eg MyApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null string exeAssembly = Assembly.GetEntryAssembly().FullName; // or just the "assembly name" part (eg "MyApplication") string exeAssemblyName = Assembly.GetEntryAssembly().GetName().Name; 

正如@Ben所提到的,由于您提到想要获取configuration信息,请使用ConfigurationManager类。

要获得没有版本的确切名称,请使用:

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

适用于.NET v1.1及更高版本。

您可以通过class级types获得该程序集…

 typeof(MyClass).Assembly 

你永远不应该把你的库与消费者(在这种情况下,Web,WinForm或WCF应用程序)。 如果你的图书馆需要configuration设置,然后把它放到图书馆。

不要编码库来从消费者的configuration文件中提取数据。 为此提供重载构造函数(就是这样)。

如果你曾经看过ConfigurationManager.AppSettings对象,它只是一个NameValueCollection 。 因此,在你的库中创build一个构造函数来接受一个NameValueCollection并让你的消费者将这些数据提供给库。

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

如果你想阅读(并显示)版本号:

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

某处在应用程序(即在Windows窗体中的标题块)

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

如果你想要父EXE的名称而不是引用的DLL程序集 – 你将需要使用这个:

 Assembly.GetEntryAssembly().GetName().Name 

这将返回EXE名称(减去.EXE部分)。

使用GetExecutingAssembly()是不正确的,因为它将返回DLL的名称,OP的问题(它的第一段!)。

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

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