.NET 程序集文件属性
本文提供了一个包含常用属性的简单类,并从程序集中获取产品信息。
引言
.NET 具有基于应用程序版本和自定义设置的良好特性。基本上,.NET 为项目中的通用设置提供了一个唯一的程序集文件。我们也可以在代码中操作该文件。我怎么能这么说呢? .NET 提供了基于程序集操作的几个属性。假设我们想知道产品的当前版本,那么我们想访问程序集文件并从该文件中获取答案。当我们尝试访问程序集文件中的产品版本属性时,必须使用 AssemblyVersionAttribute
属性。此外,.NET 类库中还存在许多基于程序集文件的自定义属性。
以下是常用属性列表
AssemblyTitleAttribute
AssemblyCompanyAttribute
AssemblyVersionAttribute
AssemblyProductAttribute
AssemblyCopyrightAttribute
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 基于程序集文件提供了良好的自定义功能。所以请尝试访问程序集文件中的所有其他属性并享受吧。