大数跨境
0
0

掌握程序集版本控制与多语言支持:.NET开发必备知识

掌握程序集版本控制与多语言支持:.NET开发必备知识 知识代码AI
2025-11-25
6

掌握程序集版本控制与多语言支持:.NET开发必备知识

在.NET开发中,程序集的版本控制和多语言支持是关键而常被忽视的技术细节

程序集版本资源信息

当使用AL.exe或CSC.exe生成PE文件程序集时,会在PE文件中嵌入标准的Win32版本资源。用户可以通过查看文件属性来检查这些信息,或者在应用程序代码中调用System.Diagnostics.FileVersionInfo的静态方法GetVersionInfo来获取。

设置版本资源的定制Attribute

生成程序集时,应使用定制attribute来设置版本资源字段:

using System.Reflection;

// 文件描述版本信息
[assembly: AssemblyTitle("JeffTypes.dll")]
// 注释版本信息
[assembly: AssemblyDescription("This assembly contains Jeff's types")]
// 公司名称版本信息
[assembly: AssemblyCompany("Wintellect")]
// 产品名称版本信息
[assembly: AssemblyProduct("Wintellect (R) Jeff's Type Library")]
// 版权版本信息
[assembly: AssemblyCopyright("Copyright (c) Wintellect 2010")]
// 商标版本信息
[assembly: AssemblyTrademark("JeffTypes is a registered trademark of Wintellect")]
// 程序集版本信息
[assembly: AssemblyVersion("3.0.0.0")]
// 文件版本信息
[assembly: AssemblyFileVersion("1.0.0.0")]
// 产品版本信息
[assembly: AssemblyInformationalVersion("2.0.0.0")]
// 设置语言文化字段
[assembly: AssemblyCulture("")]

版本资源字段与对应工具

版本资源字段
AL.exe 开关
定制 Attribute
FILEVERSION
/fileversion
AssemblyFileVersionAttribute
PRODUCTVERSION
/productversion
AssemblyInformationalVersionAttribute
AssemblyVersion
/version
AssemblyVersionAttribute
Comments
/description
AssemblyDescriptionAttribute
CompanyName
/company
AssemblyCompanyAttribute
FileDescription
/title
AssemblyTitleAttribute
LegalCopyright
/copyright
AssemblyCopyrightAttribute
LegalTrademarks
/trademark
AssemblyTrademarkAttribute
ProductName
/product
AssemblyProductAttribute

版本号详解

程序集版本号由四个部分组成,格式为:主版本号.次版本号.内部版本号.修订号

示例:2.5.719.2

  • 主版本号次版本号构成公众认知的版本(如2.5版本)
  • 内部版本号表示每日生成的递增编号
  • 修订号表示当前内部版本的修订次数

三种版本号的区别

  1. AssemblyFileVersion

    • 存储在Win32版本资源中,仅供参考
    • CLR不检查此版本号
    • 用于标识程序集的具体版本,便于故障诊断
  2. AssemblyInformationalVersion

    • 同样存储在Win32版本资源中,仅供参考
    • 表示包含该程序集的产品版本
    • 用于标识完整产品的公开发布版本
  3. AssemblyVersion

    • 存储在AssemblyDef元数据表中
    • CLR在绑定强命名程序集时使用此版本号
    • 唯一标识程序集,极为重要
    • 引用的程序集版本会嵌入到AssemblyRef表中

语言文化支持

除了版本号,程序集还将语言文化作为身份标识的一部分。

语言文化标识

语言文化使用字符串标识,包含主标记和副标记:

主标记
副标记
语言文化
de
(无)
德语
de
AT
奥地利德语
de
CH
瑞士德语
en
(无)
英语
en
GB
英国英语
en
US
美国英语

语言文化中性与附属程序集

  • 语言文化中性程序集:不指定具体语言文化,包含代码和默认资源
  • 附属程序集:标记具体语言文化,只包含语言文化特定的资源(不包含代码)

最佳实践

  1. 主程序集应设计为语言文化中性,包含默认资源
  2. 为每种支持的语言文化创建单独的附属程序集
  3. 使用AL.exe工具的/culture:text开关生成附属程序集
  4. 部署时,将附属程序集保存在与语言文化匹配的子目录中
    • 例如:C:\MyApp\en-US\ 对应美国英语资源
  5. 使用System.Resources.ResourceManager类在运行时访问附属程序集资源

总结

掌握程序集版本控制和多语言支持是.NET开发中的重要技能。正确使用三种版本号可以确保程序集的正确标识和依赖管理,而合理的语言文化策略则为应用程序的国际化奠定坚实基础。记住,AssemblyVersion是CLR实际使用的版本标识,而其他版本号主要用于信息展示和产品管理。


【声明】内容源于网络
0
0
知识代码AI
技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
内容 366
粉丝 0
知识代码AI 技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
总阅读121
粉丝0
内容366