DOBON.NET DOBON.NETプログラミング掲示板過去ログ

アセンブリ情報の取得

環境/言語:[環境:WindowsXP/PPC2003SE 使用言語:VB2005 .NET Compact Framework 2.0]
分類:[.NET]

No.8 です。
おはようございます。

プロジェクトAのアセンブリ情報を以下のように取得しています。
   Dim mainAssembly As [Assembly] = [Assembly].GetExecutingAssembly

   ' タイトル情報を取得
   Dim appTitle As String = "-"
   Dim TitleArray() As Object = _  
  mainAssembly.GetCustomAttributes(GetType(AssemblyTitleAttribute), False)
   If Not (TitleArray Is Nothing) AndAlso (TitleArray.Length > 0) Then
      appTitle = (CType(TitleArray(0), AssemblyTitleAttribute)).Title
   End If

   ' コピーライト情報を取得
   Dim appCopyright As String = "-"
   Dim CopyrightArray() As Object = _
   mainAssembly.GetCustomAttributes(GetType(AssemblyCopyrightAttribute),False)
   If Not (CopyrightArray Is Nothing) AndAlso (CopyrightArray.Length > 0) Then
      appCopyright = (CType(CopyrightArray(0),   AssemblyCopyrightAttribute)).Copyright
   End If

という感じで、取得することができました。

この情報は、いろいろなプロジェクトで使用すること可能性がある為、
他機能であるSIP制御やレジストリ入出力等のインターフェースをまとめた
別プロジェクトBのクラスにしています。

プロジェクトAでBを参照することもできましたが、上記のコードをそのまま
プロジェクトBに書いても、アセンブリ情報はプロジェクトBの内容が取得する
だけだと思います。

これを参照する側のプロジェクトAのアセンブリ情報を取得するクラスにする為
には、どのようなことが必要でしょうか?。
※的外れに思いますのでスルー推奨

ここで隠れたプロジェクトC〜Zが別々に、互いの存在をまったく確認できないとして、
「上記のコード」を埋め込んだ場合、どのような挙動になってほしいと考えていますか?
■No15089に返信(もさんの記事)
回答ありがとうございます。

> ※的外れに思いますのでスルー推奨
>
> ここで隠れたプロジェクトC〜Zが別々に、互いの存在をまったく確認できないとして、
> 「上記のコード」を埋め込んだ場合、どのような挙動になってほしいと考えていますか?

期待している動作としては以下の通りです。

1)プロジェクトAに対してBを参照した場合、Bの処理でAのアセンブリ情報を取得できる。
2)プロジェクトCはBを参照していないので、特に何もならないという。

という回答で良いのでしょうか?。

私は同じコードを何度もプロジェクト毎に書くのは面倒であること。
また、ミスも多くなる。
次に使い方として下記の通りのような形にする。

Dim appAssembly As New プロジェクトBのNamespace.Class

Dim strTitle As String = appAssembly.Title 'アセンブリ情報のタイトル
Dim strCopyright As String = appAssembly.Copyright 'アセンブリ情報の著作権

と考えています。
■No15090に返信(No.8さんの記事)
> Dim appAssembly As New プロジェクトBのNamespace.Class
>
> Dim strTitle As String = appAssembly.Title 'アセンブリ情報のタイトル
> Dim strCopyright As String = appAssembly.Copyright 'アセンブリ情報の著作権

New するとき Class のコンストラクタに自身の Assembly を渡す、と言うのが一番自然かと思います。
(突ついたのに申し訳ないですが、
.NETはほとんど知らない人間なので回答はアヤシイです)

> Dim appAssembly As New プロジェクトBのNamespace.Class
"プロジェクトBのNamespace"なる名前空間をはずして、
ただの"Class"として現在の名前空間にマップするとかできませんか?
■No15091に返信(Hongliangさんの記事)

回答ありがとうございます。

> New するとき Class のコンストラクタに自身の Assembly を渡す、と言うのが一番自然かと思います。

Public Sub New(ここにどう渡すか解らないけど引数で渡す) ということでしょうか?。
コントラクタについて調べてみます。
■No15092に返信(もさんの記事)
回答ありがとうございます。

> (突ついたのに申し訳ないですが、
> .NETはほとんど知らない人間なので回答はアヤシイです)
>
>>Dim appAssembly As New プロジェクトBのNamespace.Class
> "プロジェクトBのNamespace"なる名前空間をはずして、
> ただの"Class"として現在の名前空間にマップするとかできませんか?
ソフト自体をVB2005から始めてまだ2週間程度の身で、ネット上の検索と書籍で
何とかしている状況です。
まだまだ、解らない言葉とかもあるのですが、「マップする」というのはどういったことでしょうか?

#プロジェクトAに既存のClassとして追加するみたいなことなのかな?。
■No15093に返信(No.8さんの記事)
> ■No15091に返信(Hongliangさんの記事)
>
> 回答ありがとうございます。
>
>>New するとき Class のコンストラクタに自身の Assembly を渡す、と言うのが一番自然かと思います。
>
> Public Sub New(ここにどう渡すか解らないけど引数で渡す) ということでしょうか?。
> コントラクタについて調べてみます。

結果報告:
コンストラクタについて調査しました。
Hongliang さんの回答通り、「自身の Assembly を渡す」という方法で解決できました。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板