C#(Visual Studio) AssemblyInfo
AssemblyInfo
.NET Project的Properties文件夹下会自动生成一个AssemblyInfo.cs的文件,该文件包含的信息和项目->右键->属性->Application->Assembly Information完全一样。其作用是为程序集定义不同的属性。所有的属性都是基于.NET Framework中的System.Attribute。其语法如下:
[assembly:<attribute>(<setting>)]
AssemblyVersionAttribute
文件版本号的设置,其中Attribute可以省略 :
[assembly:AssemblyVersion("1.0")]
属性 | 描述 |
AssemblyTitle | 程序集标题,默认为DLL库名 |
AssemblyDescription | 关于程序集的简短描述 |
AssemblyCompany | 程序集所属公司名称 |
AssemblyProduct | 基于此程序集的产品名称 |
AssemblyCopyright | 程序集所属版权 |
AssemblyTrademark | 合法商标 |
AssemblyVersion | 程序集的版本 |
AssemblyCulture | 程序集支持的culture |
AssemblyConfiguration | 指定程序的生成配置,如发布或调试配置 |
ComVisible | 控制程序集中所有类型对COM的可访问性 |
这些属性基本都允许用一个字符串来定义属性的值,AssemblyVersion例外,必须使用特定格式的字符串:Major.Minor.Build.Revision
Major和Minor分别为主、副版本号,版本号的的更改通常说明和先前的版本有不兼容的改动。例如,2.1版本和基于同样库的2.2版本有不兼容的地方。
构建号(Build)是一个程序集的相同副版本的不同编译设置。它偶尔也会出现不兼容的情况,但通常,如2.1.17和2.1.42版本的运行情况是一样的。
修订号(Revision)是用来固话bug或者其他偶发的更新,它通常不会破坏兼容性。
在程序中获取这些信息
原代码处(http://blog.sina.com.cn/s/blog_61c4c1f60100eira.html)
public class GetAssembly<T> { private Type myType; public GetAssembly(Type myType) { this.myType = typeof(T); } public string AssemblyName { get { return myType.Assembly.GetName().Name.ToString(); } } public string AssemblyFullName { get { return myType.Assembly.GetName().FullName.ToString(); } } public String CodeBase { get { return myType.Assembly.CodeBase; } } public String Version { get { return myType.Assembly.GetName().Version.ToString(); } } public String Copyright { get { Type att = typeof(AssemblyCopyrightAttribute); object[] r = myType.Assembly.GetCustomAttributes(att, false); AssemblyCopyrightAttribute copyattr = (AssemblyCopyrightAttribute)r[0]; return copyattr.Copyright; } } public String Company { get { Type att = typeof(AssemblyCompanyAttribute); object[] r = myType.Assembly.GetCustomAttributes(att, false); AssemblyCompanyAttribute compattr = (AssemblyCompanyAttribute)r[0]; return compattr.Company; } } public String Configration { get { Type att = typeof(AssemblyConfigurationAttribute); object[] r = myType.Assembly.GetCustomAttributes(att, false); AssemblyConfigurationAttribute configattr = (AssemblyConfigurationAttribute)r[0]; return configattr.Configuration; } } public string TradeMark { get { Type att = typeof(AssemblyTrademarkAttribute); object[] r = myType.Assembly.GetCustomAttributes(att, false); AssemblyTrademarkAttribute aa = (AssemblyTrademarkAttribute)r[0]; return aa.Trademark; } } public string Culture { get { Type att = typeof(AssemblyCultureAttribute); object[] a = myType.Assembly.GetCustomAttributes(att, false); if (a.Length > 0) { AssemblyCultureAttribute aa = (AssemblyCultureAttribute)a[0]; return aa.Culture; } else { return "No value"; } } } public String Description { get { Type att = typeof(AssemblyDescriptionAttribute); object[] r = myType.Assembly.GetCustomAttributes(att, false); AssemblyDescriptionAttribute descattr = (AssemblyDescriptionAttribute)r[0]; return descattr.Description; } } public String Product { get { Type att = typeof(AssemblyProductAttribute); object[] r = myType.Assembly.GetCustomAttributes(att, false); AssemblyProductAttribute prodattr = (AssemblyProductAttribute)r[0]; return prodattr.Product; } } public String Title { get { Type att = typeof(AssemblyTitleAttribute); object[] r = myType.Assembly.GetCustomAttributes(att, false); AssemblyTitleAttribute titleattr = (AssemblyTitleAttribute)r[0]; return titleattr.Title; } } }
posted on 2015-02-09 17:12 code_philosophy 阅读(480) 评论(0) 编辑 收藏 举报