Introduction
We have very good features in .Net based on the application version and customizations. Basically, .Net provides a unique assembly file for the common setting within the projects. And we can play with that file within code as well.
How I can say that?
The .Net provides a few attributes based on the assembly manipulations. Suppose we want to know the current version of the product, then we want to access the assembly file and get an answer from that file. To achieve the product version attribute in the assembly file, we must use the AssemblyVersionAttribute attribute. And lots of customization attributes exist in the .Net class library based on the assembly file.
List of commonly used attributes.
- AssemblyTitleAttribute
- AssemblyCompanyAttribute
- AssemblyVersionAttribute
- AssemblyProductAttribute
- AssemblyCopyrightAttribute
- AssemblyDescriptionAttribute
This article provides a simple class with commonly used attributes and gets information from the assembly about the product.
Let's see the class.
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace AccessAssembly
{
public class ApplicationDetails
{
static string companyName = string.Empty;
/// Get the name of the system provider name from the assembly ///
public static string CompanyName
{
get
{
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly != null)
{
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
companyName = ((AssemblyCompanyAttribute)customAttributes[0]).Company;
}
if (string.IsNullOrEmpty(companyName))
{
companyName = string.Empty;
}
}
return companyName;
}
}
static string productVersion = string.Empty; ///
/// Get System version from the assembly ///
public static string ProductVersion
{
get
{
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly != null)
{
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyVersionAttribute), false);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
productVersion = ((AssemblyVersionAttribute)customAttributes[0]).Version;
}
if (string.IsNullOrEmpty(productVersion))
{
productVersion = string.Empty;
}
}
return productVersion;
}
}
static string productName = string.Empty; ///
/// Get the name of the System from the assembly ///
public static string ProductName
{
get
{
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly != null)
{
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
productName = ((AssemblyProductAttribute)customAttributes[0]).Product;
}
if (string.IsNullOrEmpty(productName))
{
productName = string.Empty;
}
}
return productName;
}
}
static string copyRightsDetail = string.Empty; ///
/// Get the copyRights details from the assembly ///
public static string CopyRightsDetail
{
get
{
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly != null)
{
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
copyRightsDetail = ((AssemblyCopyrightAttribute)customAttributes[0]).Copyright;
}
if (string.IsNullOrEmpty(copyRightsDetail))
{
copyRightsDetail = string.Empty;
}
}
return copyRightsDetail;
}
}
static string productTitle = string.Empty; ///
/// Get the Product tile from the assembly ///
public static string ProductTitle
{
get
{
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly != null)
{
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
productTitle = ((AssemblyTitleAttribute)customAttributes[0]).Title;
}
if (string.IsNullOrEmpty(productTitle))
{
productTitle = string.Empty;
}
}
return productTitle;
}
}
static string productDescription = string.Empty; ///
/// Get the description of the product from the assembly ///
public static string ProductDescription
{
get
{
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly != null)
{
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
productDescription = ((AssemblyDescriptionAttribute)customAttributes[0]).Description;
}
if (string.IsNullOrEmpty(productDescription))
{
productDescription = string.Empty;
}
}
return productDescription;
}
}
}
}
Let us see how to get a product description from the assembly file.
public static string ProductDescription
{
get
{
// Get the entry assembly file for the product
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly != null)
{
// Now get the custom attribute for the AssemblyDescriptionAttribute
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
productDescription = ((AssemblyDescriptionAttribute)customAttributes[0]).Description;
}
if (string.IsNullOrEmpty(productDescription))
{
productDescription = string.Empty;
}
}
return productDescription;
}
}
We want to get all custom attributes from the assembly file based on the AssemblyDescriptionAttribute.
object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
After this, access the first attribute in the collections, and get the value from that.
productDescription = ((AssemblyDescriptionAttribute)customAttributes[0]).Description;
Conclusion
The .Net provides good customization based on the assembly file. So please try to access all other attributes in the assembly file and enjoy.