2009-10-26 55 views
17

我想從我的C#類庫中的WinForm項目中獲取AssemblyCompany屬性。在的WinForms,我可以用得到這個信息:從類庫中檢索AssemblyCompanyName

Application.CompanyName; 

不過,我似乎無法找到一種方式來獲得在使用類庫,相同的信息。你可以提供的任何幫助將會很棒!

+0

AboutBox訪問並顯示大部分裝配信息(儘管不是生成日期)。我只是啓動AboutBox窗體,最小化,我添加了一些代碼以將所需字段彈出到通用類中,然後關閉窗體。 – italfingers 2017-01-05 14:11:16

回答

23

要獲得當前您的代碼(類庫代碼)實際所在的裝配,並讀取其公司屬性:

Assembly currentAssem = typeof(CurrentClass).Assembly; 
object[] attribs = currentAssem.GetCustomAttributes(typeof(AssemblyCompanyAttribute), true); 
if(attribs.Length > 0) 
{ 
    string company = ((AssemblyCompanyAttribute)attribs[0]).Company 
} 
+0

我不知道這是因爲我在.NET 2.0中,但我必須在GetCustomAttributes的調用結束時添加「true」。除此之外,像冠軍一樣工作!謝謝你的幫助! – 2009-10-26 19:37:02

+2

我覺得它非常有用!如果你正在使用一個新的.NET版本,你可以使用typeof(CurrentClass).Assembly.GetCustomAttribute ()。公司 – DarioDF 2015-04-14 19:27:11

4
Assembly assembly = typeof(CurrentClass).GetAssembly(); 
    AssemblyCompanyAttribute companyAttribute = AssemblyCompanyAttribute.GetCustomAttribute(assembly, typeof(AssemblyCompanyAttribute)) as AssemblyCompanyAttribute; 
    if (companyAttribute != null) 
    { 
     string companyName = companyAttribute.Company; 
     // Do something 
    } 
+0

忘記檢查companyAttribute == null – 2009-10-26 19:35:32

+0

固定。我從中得到的代碼不會檢查null,因爲它在我們的日誌記錄組件(公司名稱屬性IS設置)中。公司名稱是必需的,所以如果不存在,第一次違規的開發人員將運行代碼時會拋出異常! – 2009-10-26 19:53:27

4

您可以使用FileVersionInfo類來獲得公司名稱的更。

Dim info = FileVersionInfo.GetVersionInfo(GetType(AboutPage).Assembly.Location) 
    Dim companyName = info.CompanyName 
    Dim copyright = info.LegalCopyright 
    Dim fileVersion = info.FileVersion 
+0

爲什麼要使用fileinfo來獲取關於已在範圍內的相同程序集的信息? – devlord 2015-04-16 17:24:24

+0

@lorddev我看到獲取FileVersionInfo對象的唯一方法是通過調用帶有字符串路徑的靜態/共享GetVersionInfo函數。其他選項? – 2015-04-16 21:01:40