
I've gotten this question 3 times in different flavors since last week and I've decided that it's time to post the solution in my blog. I've added comments on the code to explain what every line is doing.
The code below will demonstrate how you can read the assembly information in both C# and VB.NET.
[------------------ C# ------------------]
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
namespace KeithRull.ReadingAssemblyInformation
{
/// <summary>
/// A sample program that demonstrates how to get the
/// Assembly information. This is useful when you want
/// to see the version of your class library.
/// </summary>
class Program
{
static void Main(string[] args)
{
//create a new assembly object that would signify
//the current running assembly
Assembly currentAssembly = Assembly.GetExecutingAssembly();
//create the dictionary object that would contain
//all the information about our assembly
Dictionary<string, string> dictionaryOfProperties
= GetAssemblyInfoDictionary(currentAssembly);
//iterate thru each key in the dictionary
foreach (string key in dictionaryOfProperties.Keys)
{
//print the key and its value
Console.WriteLine("{0}: {1}", key, dictionaryOfProperties[key]);
}
//pause
Console.ReadLine();
}
/// <summary>
/// A method that returns a Dictionary of Assembly properties
/// </summary>
/// <param name="selectedAssembly">The assembly to inspect</param>
/// <returns>The dictrionary containing the assembly information</returns>
public static Dictionary<string, string> GetAssemblyInfoDictionary(Assembly selectedAssembly)
{
//Create the dictionary
Dictionary<string, string> dictionaryOfProperties
= new Dictionary<string, string>();
//get the location of the assembly
string assemblyPath = selectedAssembly.Location;
//add the assembly location to out dictionary
dictionaryOfProperties.Add("AssemblyLocation", assemblyPath);
//create the AssemblyName object based on our Assembly
//this will enable us to get the version information
//and other properties related to our assembly
AssemblyName assemblyName = selectedAssembly.GetName();
//add the FullName of out assembly
dictionaryOfProperties.Add("AssemblyFullName", assemblyName.FullName);
dictionaryOfProperties.Add("AssemblyName", assemblyName.FullName);
//add the assembly version information
dictionaryOfProperties.Add("Version", assemblyName.Version.ToString());
dictionaryOfProperties.Add("Version.Major", assemblyName.Version.Major.ToString());
dictionaryOfProperties.Add("Version.Minor", assemblyName.Version.Minor.ToString());
dictionaryOfProperties.Add("Version.Build", assemblyName.Version.Build.ToString());
dictionaryOfProperties.Add("Version.Revision", assemblyName.Version.Revision.ToString());
//add the creation time
DateTime creationTime = File.GetCreationTime(assemblyPath);
dictionaryOfProperties.Add("CreationTime", creationTime.ToString());
//add the last write time
DateTime lastWriteTime = File.GetLastWriteTime(assemblyPath);
dictionaryOfProperties.Add("LastWriteTime", creationTime.ToString());
//return our dictionary obeject
return dictionaryOfProperties;
}
}
}
[------------------ VB.NET ------------------]
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Reflection
Imports System.IO
Namespace KeithRull.ReadingAssemblyInformation
''' <summary>
''' A sample program that demonstrates how to get the
''' Assembly information. This is useful when you want
''' to see the version of your class library.
''' </summary>
Module Program
Sub Main(ByVal args As String())
'create a new assembly object that would signify
'the current running assembly
Dim currentAssembly As Assembly = Assembly.GetExecutingAssembly()
'create the dictionary object that would contain
'all the information about our assembly
Dim dictionaryOfProperties As Dictionary(Of String, String) = GetAssemblyInfoDictionary(currentAssembly)
'iterate thru each key in the dictionary
For Each key As String In dictionaryOfProperties.Keys
'print the key and its value
Console.WriteLine("{0}: {1}", key, dictionaryOfProperties(key))
Next
'pause
Console.ReadLine()
End Sub
''' <summary>
''' A method that returns a Dictionary of Assembly properties
''' </summary>
''' <param name="selectedAssembly">The assembly to inspect</param>
''' <returns>The dictrionary containing the assembly information</returns>
Public Function GetAssemblyInfoDictionary(ByVal selectedAssembly As Assembly) As Dictionary(Of String, String)
'Create the dictionary
Dim dictionaryOfProperties As New Dictionary(Of String, String)()
'get the location of the assembly
Dim assemblyPath As String = selectedAssembly.Location
'add the assembly location to out dictionary
dictionaryOfProperties.Add("AssemblyLocation", assemblyPath)
'create the AssemblyName object based on our Assembly
'this will enable us to get the version information
'and other properties related to our assembly
Dim assemblyName As AssemblyName = selectedAssembly.GetName()
'add the FullName of our assembly
dictionaryOfProperties.Add("AssemblyFullName", assemblyName.FullName)
'add the Name of the assembly
dictionaryOfProperties.Add("AssemblyName", assemblyName.Name)
'add the assembly version information
dictionaryOfProperties.Add("Version", assemblyName.Version.ToString())
dictionaryOfProperties.Add("Version.Major", assemblyName.Version.Major.ToString())
dictionaryOfProperties.Add("Version.Minor", assemblyName.Version.Minor.ToString())
dictionaryOfProperties.Add("Version.Build", assemblyName.Version.Build.ToString())
dictionaryOfProperties.Add("Version.Revision", assemblyName.Version.Revision.ToString())
'add the creation time
Dim creationTime As DateTime = File.GetCreationTime(assemblyPath)
dictionaryOfProperties.Add("CreationTime", creationTime.ToString())
'add the last write time
Dim lastWriteTime As DateTime = File.GetLastWriteTime(assemblyPath)
dictionaryOfProperties.Add("LastWriteTime", creationTime.ToString())
'return our dictionary obeject
Return dictionaryOfProperties
End Function
End Module
End Namespace
HTH ;)