2009-10-26 1 views
17

私は、C#クラスライブラリ内のWinFormプロジェクトからAssemblyCompany属性を取得したいと考えています。リサイズでは、私が使用してこの情報を得ることができます。AssemblyCompanyNameをクラスライブラリから取得する

Application.CompanyName; 

しかし、私はクラスライブラリを使用して、同じ情報で取得する方法を見つけるように見えることはできません。あなたが提供できるどんな助けも素晴らしいでしょう!

+0

AboutBoxは、アセンブリ情報のほとんど(ビルド日付ではありません)にアクセスして表示します。私はAboutBoxフォームを起動し、必要なフィールドを共通クラスにポップしてフォームを閉じるコードを追加しました。 – italfingers

答えて

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」を追加する必要がありました。それ以外は、チャンピオンのように働いた!ご協力いただきありがとうございます! –

+2

私はそれが非常に便利だと分かった!新しい.NETバージョンを使用している場合は、typeof(CurrentClass).Assembly.GetCustomAttribute ()を使用できます。会社 – DarioDF

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を確認するのを忘れました –

+0

修正済み。私がロギングコンポーネント(会社名属性が設定されている場所)にあるので、これを取得したコードはnullをチェックしません。会社名は必須なので、そこになければ問題のある開発者がコードを初めて実行したときに例外がスローされます! –

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

+0

@lorddev FileVersionInfoオブジェクトを取得する唯一の方法は、文字列パスをとる静的/共有GetVersionInfo関数を呼び出すことです。その他のオプション? –

関連する問題