Recuperare tutti gli assembly referenziati dalla nostra applicazione
Scritto da
Massimo Bonanni il
giovedì 10 febbraio 2011
•
Linguaggio:
• Livello: 100
La classe Assembly mette a disposizione il
metodo GetReferencedAssembly che permette, a partire da
un'istanza di Assembly di recuperare gli AssemblyName relativi agli
Assembly da esso referenziato.
Tale metodo, però, recupera solamente il primo livello di
reference. Vale a dire che se nella nostra applicazione utilizziamo
una dll la quale, a sua volta, utilizza altre dll, il metodo
restituirà solamente l'assembly relativo alla prima dll.
IL seguente Extension Method della classe Assembly utilizza il
metodo GetReferencedAssembly per eseguire una ricerca ricorsiva al
fine di recuperare tutti gli assembly referenziati:
Imports System.Runtime.CompilerServices
Imports System.Reflection
Module AssemblyExtension
<Extension()> _
Public Sub GetAllReferencedAssemblies(ByVal sourceAssembly As Assembly,
ByVal allowGacAssembly As Boolean,
ByVal list As ICollection(Of AssemblyName))
If sourceAssembly Is Nothing Then Throw New ArgumentNullException("Source Assembly")
If list Is Nothing Then Throw New ArgumentNullException("Destination List")
list.Add(sourceAssembly.GetName())
If allowGacAssembly OrElse Not sourceAssembly.GlobalAssemblyCache Then
Dim assemblies = sourceAssembly.GetReferencedAssemblies()
For Each assemblyName In assemblies
Dim query = From a In list _
Where a.FullName = assemblyName.FullName _
Select a
If query.Count = 0 Then
Dim assembly As Assembly = assembly.Load(assemblyName.FullName)
assembly.GetAllReferencedAssemblies(allowGacAssembly, list)
End If
Next
End If
End Sub
End Module
Attenzione: per assembly referenziato si intende un assembly del
quale è utilizzato almeno un tipo contenuto.
Tags: Reflection