Introduction
We have good features in .NET based on the application version and customizations. Basically .NET provides a unique assembly file for the common setting within Projects. We can play with that file within code as well. How I can say that? .NET gives few attributes based on assembly manipulations. Let's say we want to know the current version of the Product, so we want to access the assembly file and get an answer from that file. When we try to access that product version attribute in the assembly file, we must use the AssemblyVersionAttribute
attribute. In addition, a lot of customization attributes exist in the .NET class library based on the assembly file.
A list of commonly used attributes is as follows:
AssemblyTitleAttribute
AssemblyCompanyAttribute
AssemblyVersionAttribute
AssemblyProductAttribute
AssemblyCopyrightAttribute
AssemblyDescriptionAttribute
Now some people may know how to use those attributes with our coding. Perhaps others may not know it. This article provides a simple class with commonly used attributes and gets information from the assembly about the product. Let’s look at the class below:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace AccessAssembly
{
public class ApplicationDetails
{
static string companyName = string.Empty;
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;
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;
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;
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;
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;
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's look at a simple explanation to get the product description from the assembly file:
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;
}
}
We want to get all custom attributes from the assembly file based on the AssemblyDescriptionAttribute
.
object[] customAttributes =
assembly.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
Later, access the first attribute in the collections and get the value from that:
productDescription = ((AssemblyDescriptionAttribute)customAttributes[0]).Description;
That’s all.
Conclusion
.NET provides good customization based on the assembly file. So please try to access all other attributes in the assembly file and enjoy.