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

时间:2008-11-07 17:21:18

标签: c# .net

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

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

8 个答案:

答案 0 :(得分:50)

要获得问题标题的答案:

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

如@Ben所述,由于您提到想要获取配置信息,请使用ConfigurationManager类。

答案 1 :(得分:18)

如果您想获取当前appdomain的配置文件,那么您需要做的就是:

ConfigurationManager.AppSettings ...

(当然这需要引用System.Configuration)。

要回答你的问题,你可以像Ray所说的那样(或使用Assembly.GetExecutingAssembly().FullName),但我认为使用ConfigurationManager可以更轻松地解决问题。

答案 2 :(得分:7)

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

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

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

答案 3 :(得分:7)

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

typeof(MyClass).Assembly

答案 4 :(得分:3)

您永远不应该将您的库耦合到消费者(在本例中为Web,WinForm或WCF应用程序)。如果您的库需要配置设置,请将其提供给库。

不要对库进行编码以从使用者的配置文件中提取该数据。为此提供重载的构造函数(这就是它们的用途)。

如果您曾查看过ConfigurationManager.AppSettings个对象,那么它只是NameValueCollection。因此,在库中创建一个构造函数以接受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);
  }
}

答案 5 :(得分:2)

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

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

  Version ver=assname.Version;

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

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

答案 6 :(得分:0)

如果您想要父EXE的名称而不是引用的DLL程序集 - 您将需要使用它:

Assembly.GetEntryAssembly().GetName().Name

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

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

答案 7 :(得分:0)

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

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