首页 文章

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

提问于
浏览
33

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

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

8 回答

  • 2

    如果要读取(并显示)版本号:

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

    应用程序中的某个位置(即Windows窗体中的 Headers 块)

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

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

    Assembly.GetEntryAssembly().GetName().Name
    

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

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

  • 49

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

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

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

    ConfigurationManager.AppSettings ....

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

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

  • 0

    要获得问题 Headers 的答案:

    // 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 类 .

  • 3

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

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

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

  • 18

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

    typeof(MyClass).Assembly
    
  • 7

    您永远不应该将您的库耦合到使用者(在本例中为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);
      }
    }
    

相关问题