代码改变世界

2.5 程序集版本资源信息

2011-11-24 13:38  iRead  阅读(1823)  评论(0编辑  收藏  举报

  AL.exe或CSC.exe生成一个PE文件程序集时,还会在PE文件中嵌入一个标准的Win32版本资源。用户可以查看文件的属性来检查这个资源。在应用程序代码中,可以调用System.Diagnostics.FileVersionInfo的static方法GetVersionInfo来获取并检查这些信息。图2-4显示的是JeffType.dll属性对话框的“详细信息”选项卡。

图2-4 “JeffTypes.dll属性”对话框的“详细信息”选项卡

  生成程序集时,应该使用一些定制attribute来设置版本资源文件,这些attribute是在源代码中应用于assembly这一级别的。图2-4的版本信息是用以下代码来生成的:

using System.Reflection;

//  FileDescription版本信息
[assembly:AssemblyTitle("JeffTypes.dll")]

//  Comments版本信息
[assembly:AssemblyDescription("This assembly contains Jeff's types")]

//  CompandName版本信息
[assembly:AssemblyCompany("Wintellect")]

//  ProdutctName版本信息
[assembly:AssemblyProduct("Wintellect (R) Jeff's Type Library")]

//  LegalCopyright版本信息
[assembly:AssemblyCopyright("Copyright (c) Wintellect 2010")]

//  LegalTrademarks版本信息
[assembly:AssemblyTrademark("JeffTypes is a registered trademark of Wintellect")]

//  AssemblyVersion版本信息
[assembly:AssemblyVersion("3.0.0.0")]

//  FILEVERSION/FileVersion版本信息
[assembly:AssemblyFileVersion("1.0.0.0")]

//  PRODUCTVERSION/ProductVersion版本信息
[assembly:AssemblyInformationalVersion("2.0.0.0")]

//  设置Language字段(参见2.6节“语言文化”)
[assembly:AssemblyCulture("")]

重要提示:Windows资源管理器的属性对话框明显遗漏了一些attribute值。最遗憾的是没有显示AssemblyVersion这个attribute值,因为CLR加载程序集时会使用这个值,详情将在第3章讨论。

  表2-4总结了版本资源字段以及它们对应的定制attribute。如果使用AL.exe来生成程序集,可以用命令行开关来设置这些信息,而不必使用定制attribute。表2-4的第二列显示了每个版本资源字段对应的AL.exe命令行开关。注意,C#编译器没有提供这些命令行开关。在这种情况下,最好是用定制attribute来设置这些信息。

  表2-4 版本资源字段和对应的AL.exe开关/定制attribute

版本资源 AL.exe开关 定制attribute/说明
FILEVERSION /fileversion System.Reflection.AssemblyFileVersionAttribute
PRODUCTVERSION /productversion System.Reflection.AssemblyInformationalVersionAttribute
FILEFLAGSMASK (无) 总是设为VS_FFI_FILEFLAGSMASK(在WinVer.h中定义为0x0000003F)
FILEFLAGS (无) 总是0
FILEOS (无) 目前总是VOS__WINDOWS32
FILETYPE /target 如果指定了/target:exe/target:winexe,就设为VFT_APP;如果指定了/target:library,就设为VFT_DLL
FILESUBTYPE (无) 总是设为VFT2_UNKNOWN(该字段对于VFT_APPVFT_DLL无意义)
AssemblyVersion /version System.Reflection.AssemblyVersionAttribute
Comments /description System.Reflection.AssemblyDescriptionAttribute
CompanyName /company System.Reflection.AssemblyCompanyAttribute
FileDescription /title System.Reflection.AssemblyTitleAttribute
FileVersion /version System.Reflection.AssemblyFileVersionAttribute
InternalName /out 设为指定的输出文件的名称(无扩展名)
LegalCopyright /copyright System.Reflection.AssemblyCopyrightAttribute
LegalTrademarks /trademark System.Reflection.AssemblyTrademarkAttribute
OriginalFilename /out 设为输出文件的名称(无路径)
PrivateBuild (无) 总是为空
ProductName /product System.Reflection.AssemblyProductAttribute
ProductVersion /productversion System.Reflection.AssemblyInformationalVersionAttribute
SpecialBuild (无) 总是空白

重要提示:在Visual Studio中新建一个C#项目时,会自动创建一个AssemblyInfo.cs文件。这个文件除了包含本节描述的所有程序集版本attribute之外,还包括要在第3章讨论的几个attribute。可直接打开AssemblyInfo.cs文件,并修改你的程序集特有的信息。Visual Studio还提供了一个对话框来帮助你编辑这个文件中的程序集信息。为了打开这个对话框,请打开项目的属性对话框,然后在“应用程序”选项卡中单击“程序集信息”。随后会看到如图2-5所示的一个对话框。

图2-5 Visual Studio的“程序集信息”对话框

 

  返回目录