Getting Assembly Information


Today, I will speak about getting Assembly information from a file.

What Is an Assembly?

According to MSDN: Assemblies are the building blocks of .NET Framework applications; they form the fundamental unit of deployment, version control, reuse, activation scoping, and security permissions. An assembly is a collection of types and resources that are built to work together and form a logical unit of functionality. An assembly provides the common language runtime with the information it needs to be aware of type implementations. To the runtime, a type does not exist outside the context of an assembly.

Have a read through here to understand what type of information can be stored inside an assembly.

Sample Project

Now that you have a basic understanding of assemblies and what information can be stored inside an assembly, you can follow my sample project. Start Visual Studio and create a new Windows application. Add one list box to the form. Resize the form and list box as necessary.


First, add the imports statement to import Assembly reading capabilities:

Imports System.Reflection

Declare the following modular variable that will be used by more than one procedure:

Dim path As String = "C:\WINDOWS\Microsoft.NET\Framework\ _

This variable will hold the path of the file that contains the information we want to read.

Add the following Sub procedure:

Private Sub ShowAssemblyInfo(ByVal a As Assembly)


   ' Show Modules
   For Each m As [Module] In a.GetModules

End Sub

The purpose of this sub procedure is to read the assembly information in the given file. It reads the full name of the assembly present inside the file along with its version information. Then, it determines whether or not this assembly is loaded from the GlobalAssemblyCache. It then reads the file’s location and the .NET file runtime version. It adds all this information to the listbox. The loop runs through the assembly and lists all the modules present.

Call this sub procedure from Form_Load:

Private Sub Form1_Load(sender As Object, _
   e As EventArgs) Handles Me.Load
   ' Load a specific Assembly
   Dim a As Assembly = Assembly.LoadFile(path)
End Sub

In Form_Load, I just simply called the ShowAssemblyInfo sub; nothing too complicated. When run, it looks like Figure 1:

Figure 1: Basic Assembly Information

Add the following Sub procedure to your code:

 Private Sub Flaggs()
   ' Using BindingFlags to only get declared and
   ' instance members
   Dim flags As BindingFlags = _
      BindingFlags.DeclaredOnly Or BindingFlags.Public _
      Or BindingFlags.Instance

   ' Load the Assembly from the path
   Dim theAssembly As Assembly = Assembly.LoadFrom(path)

   Dim types() As Type = theAssembly.GetTypes
   For Each t As Type In types

      Dim members() As MemberInfo = t.GetMembers(flags)
      For Each member As MemberInfo In members
         ListBox1.Items.Add(member.MemberType _
         & " " & member.Name)

 End Sub

This one is a bit trickier… With the Flaggs (stupidly named, but hey, this is only an example) sub procedure, I delved a bit deeper into what type of information I can obtain from an assembly. In this case, I obtained the object data types declared inside the assembly as well as each member (object)’s information. This information includes the name of the objects as well as its type information.

Once run, your form will resemble Figure 2.

Figure 2: Advanced Assembly Information

More Reading

Obviously, I haven’t even scratched the surface on Assemblies and the Reflection Namespace, so here is a bit more studying for you:


I hope you have enjoyed today’s article. Until next time, this is me signing off!

Hannes DuPreez
Ockert J. du Preez is a passionate coder and always willing to learn. He has written hundreds of developer articles over the years detailing his programming quests and adventures. He has written the following books: Visual Studio 2019 In-Depth (BpB Publications) JavaScript for Gurus (BpB Publications) He was the Technical Editor for Professional C++, 5th Edition (Wiley) He was a Microsoft Most Valuable Professional for .NET (2008–2017).

More by Author

Must Read