2.5 程序集版本资源信息
2011-11-24 13:38 iRead 阅读(1844) 评论(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_APP和VFT_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的“程序集信息”对话框
浙公网安备 33010602011771号