簡體   English   中英

從C#中引用的DLL執行程序集名稱

[英]Get executing assembly name from referenced DLL in C#

從C#中引用的類庫獲取執行程序集的應用程序名稱(即MyApplication.exe)的最佳方法是什么?

我需要打開應用程序的app.config來檢索引用的DLL的一些appSettings變量。

要獲得問題標題的答案:

// 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類。

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

ConfigurationManager.AppSettings ....

(當然這需要引用System.Configuration)。

要回答你的問題,你可以像Ray所說的那樣(或者使用Assembly.GetExecutingAssembly().FullName ),但我認為使用ConfigurationManager可以更容易地解決問題。

您可以通過類類型獲取程序集...

typeof(MyClass).Assembly

要獲得沒有版本等的確切名稱,請使用:

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

適用於.NET v1.1及更高版本。

您永遠不應該將您的庫耦合到使用者(在本例中為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);
  }
}

如果要讀取(並顯示)版本號:

  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部分)。

根據OP的問題(它的第一段!)使用GetExecutingAssembly()是不正確的,因為它將返回DLL名稱。

對於類實例中程序集的簡稱:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM