【VB.NET】実行中のアセンブリが参照している DLL のアセンブリ情報を取得する

実行中の EXE が参照しているクラスライブラリ(DLL)のアセンブリ情報を取得したいと思った。

結論から言うと、こんな感じでいけた(下記のコードは「著作権」の取得例)。

'Imports System.Reflection
Dim oExecutingAssembly As Assembly = Assembly.GetExecutingAssembly()

For Each oReferencedAssembly as AssemblyName In oExecutingAssembly.GetReferencedAssemblies

    Dim oAssembly As Assembly = Assembly.Load(oReferencedAssembly.FullName)

    Dim oAttribute As Attribute = Attribute.GetCustomAttribute(oAssembly, GetType(AssemblyCopyrightAttribute))

    Dim oCopyright As AssemblyCopyrightAttribute = CType(oAttribute, AssemblyCopyrightAttribute)

    MsgBox(oReferencedAssembly.Name & ":" & oCopyright.Copyright) 

Next

 

アセンブリ情報の違う項目を取得したい場合は、AssemblyCopyrightAttribute のところを別の Assembly~Attribute に変えて、最後のほうの oCopyright.Copyright を適切な変数名とプロパティにすればオーケー。(別の Assembly~Attribute とは、AssemblyTitleAttribute、AssemblyDescriptionAttribute、AssemblyCompanyAttribute、AssemblyProductAttribute、AssemblyTrademarkAttribute 等)

特定の DLL の情報だけを取得したい場合は、あくまでも一例だが、下記のように条件分岐させてやればいいかな(dic にはあらかじめ DLL 名を入れておく)。

if dic.ContainsKey(oReferencedAssembly.Name) = True Then
   :
End If

Assembly.Load の他に Assembly.LoadFile や Assembly.LoadFrom や Assembly.LoadWithPartialName でも Assembly を取得できるのでチェックしてみてください。

 

話がずれるけど、アセンブリ情報を取得するコードのところをよく見てみると、一見無駄なことをしてるようにも見えますね。コピーライトの型を指定しておきながら、取得するのは AssemblyCopyrightAttribute ではなく Attribute。そしてその Attribute をあらためてコピーライトの型にキャストし直してる。う~む。

購読する
通知を受け取る対象
guest
0 Comments
Inline Feedbacks
View all comments