Thursday, December 27, 2007

Access Assembly file and get Product informations

Hi Guys

We have good features in the .net based on the application version and customizations. Basically dot net provide 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 dot net give few attributes based on the assembly manipulations. Let say we want to know the current version of the Product, so we want to access assembly file and get answer from that file. Since when we try access that product version attribute in the assembly file, we must use the AssemblyVersionAttribute attribute.

And lot’s customization attribute exist in the .net class library based on the assembly file.

List of commonly using attributes.

1. 1.AssemblyTitleAttribute

2. 2.AssemblyCompanyAttribute

3. 3.AssemblyVersionAttribute

4. 4.AssemblyProductAttribute

5.5 5.AssemblyCopyrightAttribute

6. 6.AssemblyDescriptionAttribute

Now see, somebody can know how use those attribute with our coding .somebody may be can’t know. This article provides simple class with commonly using attribute, 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 see simple explanation get product description from the assembly file

public static string ProductDescription

{

get

{

//get the entry assebly 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 attribute from the assembly file based on the AssemblyDescriptionAttribute .

object[] customAttributes = assembly.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);

After access the first attribute in the collections, and get the value from that

productDescription = ((AssemblyDescriptionAttribute)customAttributes[0]).Description;

That’s it. and enjoy

Con

The .net provides a good customization based on the assembly file. So please try access all other attributes in the assembly file and enjoy.

Best Regards
RRave

MCTS/MCPD

Monday, December 17, 2007

CLS Attribute in DotNet

Hi Guys,

The when i see the microsoft forums and other forums sites, many guys ask about CLSCompliant attribute in the class file or assembly. i have idea about that , and i will post here. It's not complicated, but have some conditions and etc...

The conditions means, CLS-Command Language Specification(.NET).When i can say .net is great framework for all guys.because of it's multi language supporting such as VB.NET,C++.NET,C#.NET,J# and etc....Somebody can ask how can support a framework to multi language? answer is that is th .NET FRAMEWORK.

Come to point..
so when we try a code in any language with .net Framework, we must follow few rules , when we will apply
CLSCompliant attribute.

a::The methods are not same. it;s we have one method call "GetUsers()", and we don't have a method like "GETUSERS()".

b::Only properties and methods may be overloaded, Operators should not be overloaded.

c::We must avoid unsignned datatype within the class file

d::Publicly exposed members cannot start with an underscore ( _ )

e::Unsafe types like pointers should not be used with public members. However they can be used with private members.

f::Operators can't be overloaded

g::Unsigned types should not be part of the public interface of the class.


we can apply CLSCompliant to assemblies, modules, types, and members.

Example::A(apply to class)
[CLSCompliant(true)]
public class Smp
{

}

Example::B(apply to assembly
using System;
[assembly:CLSCompliant(true)]

Con....

If you develop applications that conform to the CLS, your program will be interoperable with a wide range of .Net supported programming languages. Therefore, your application is likely to have a wider customer base than a non-CLS-compliant version of your application. You can make sure that the C# programs you develop are CLS compliant by using the CLSCompliantAttribute, which will cause the compiler to raise errors if the program is not CLS compliant.

Best Regards
RRave
MCTS,MCPD