Click here to Skip to main content
6,305,776 members and growing! (15,786 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » .NET Framework » General     Intermediate License: The Code Project Open License (CPOL)

.NET Assembly File Attributes

By Ravenet

This article provides a simple class with commonly used attributes and gets information from the assembly about the product.
C#, .NET, Dev
Posted:11 Jan 2008
Views:7,835
Bookmarked:9 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
6 votes for this article.
Popularity: 2.13 Rating: 2.73 out of 5
2 votes, 33.3%
1
1 vote, 16.7%
2
1 vote, 16.7%
3

4
2 votes, 33.3%
5

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:

  1. AssemblyTitleAttribute
  2. AssemblyCompanyAttribute
  3. AssemblyVersionAttribute
  4. AssemblyProductAttribute
  5. AssemblyCopyrightAttribute
  6. 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;

        /// 
        /// 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's look at a simple explanation to get the 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 customattribute 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);

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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Ravenet


Member
- B.Sc. degree in Computer Science.
- 4+ years experience in Visual C#.net and VB.net
- Obsessed in OOP style design and programming.
- Designing and developing Network security tools.
- Designing and developing a client/server application for sharing files among users in a way other than FTP protocol.
- Designing and implementing GSM gateway applications and bulk messaging.
- Windows Mobile and Symbian Programming
- Having knowledge with ERP solutions

The summary of my skills:
C#, VB.Net#,ASP.net, VC++, Java, WPF,WCF, Oracle, SQL Server, MS Access, Windows NT administration

Cheers
RRave
MCPD,MCTS
http://codegain.com
Occupation: Software Developer
Company: TGS Solutions
Location: Singapore Singapore

Other popular .NET Framework articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 5 of 5 (Total in Forum: 5) (Refresh)FirstPrevNext
GeneralWith your help, I created this AssemblyInfo class Pinmembermddubs5:14 30 Apr '09  
GeneralRe: With your help, I created this AssemblyInfo class PinmemberRavenet5:18 30 Apr '09  
Generalhow about...? PinmemberStephan Poelwijk3:21 12 Jan '08  
GeneralRe: how about...? PinmemberRavenet5:15 30 Jan '08  
GeneralRe: how about...? PinmemberRavenet5:16 30 Jan '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 11 Jan 2008
Editor: Deeksha Shenoy
Copyright 2008 by Ravenet
Everything else Copyright © CodeProject, 1999-2009
Web20 | Advertise on the Code Project