65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 程序集文件属性

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.73/5 (6投票s)

2008年1月11日

CPOL

1分钟阅读

viewsIcon

39009

本文提供了一个包含常用属性的简单类,并从程序集中获取产品信息。

引言

.NET 具有基于应用程序版本和自定义设置的良好特性。基本上,.NET 为项目中的通用设置提供了一个唯一的程序集文件。我们也可以在代码中操作该文件。我怎么能这么说呢? .NET 提供了基于程序集操作的几个属性。假设我们想知道产品的当前版本,那么我们想访问程序集文件并从该文件中获取答案。当我们尝试访问程序集文件中的产品版本属性时,必须使用 AssemblyVersionAttribute 属性。此外,.NET 类库中还存在许多基于程序集文件的自定义属性。

以下是常用属性列表

  1. AssemblyTitleAttribute
  2. AssemblyCompanyAttribute
  3. AssemblyVersionAttribute
  4. AssemblyProductAttribute
  5. AssemblyCopyrightAttribute
  6. AssemblyDescriptionAttribute

现在有些人可能知道如何在我们的代码中使用这些属性。也许其他人不知道。本文提供了一个包含常用属性的简单类,并从程序集中获取产品信息。让我们看一下下面的类

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;
            }
        }
    }
}

让我们来看一个简单的解释,以从程序集中获取产品描述

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;
    }
}

我们想基于 AssemblyDescriptionAttribute 从程序集中获取所有自定义属性。

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

稍后,访问集合中的第一个属性并从该属性中获取值

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

就这样。

结论

.NET 基于程序集文件提供了良好的自定义功能。所以请尝试访问程序集文件中的所有其他属性并享受吧。

© . All rights reserved.