.NET的AssemblyVersionAttribute类如何定义版本号?

程序集版本号格式为major.minor.build.revision,用于标识程序集的主版本、次版本、生成号和修订号,CLR通过该版本号进行程序集加载与绑定,其中主版本用于重大不兼容更新,次版本用于兼容的功能新增,生成号和修订号分别表示编译次数和小修。

.NET的AssemblyVersionAttribute类如何定义版本号?

.NET的AssemblyVersionAttribute类通过一个字符串来定义程序集的版本号,这个字符串遵循“主版本号.次版本号.生成号.修订号”的格式。理解这个格式,对于版本控制和部署至关重要。

AssemblyVersionAttribute允许你为程序集指定一个版本号。这个版本号在程序集的元数据中存储,并被CLR(公共语言运行时)用来在运行时加载和绑定程序集。

程序集版本号的格式和作用是什么?

版本号的格式是

major.minor.build.revision

,每个部分都有其特定的含义:

  • Major(主版本号): 表示程序集的主要版本。如果程序集发生了重大更改,或者与之前的版本不兼容,那么应该增加主版本号。
  • Minor(次版本号): 表示程序集的次要版本。如果程序集添加了新功能,但是与之前的版本兼容,那么应该增加次版本号。
  • Build(生成号): 表示程序集的生成号。每次重新编译程序集时,可以增加生成号。通常,生成号用于表示程序集的内部版本。
  • Revision(修订号): 表示程序集的修订号。如果程序集修复了Bug,或者进行了小的更改,那么应该增加修订号。

如何使用AssemblyVersionAttribute?

你可以在

AssemblyInfo.cs

文件中使用

AssemblyVersionAttribute

来指定程序集的版本号。例如:

using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices;  // 有关程序集的常规信息通过以下项进行控制 // 特性集。更改这些特性值可修改 // 与程序集关联的信息。 [assembly: AssemblyTitle("MyAssembly")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("MyCompany")] [assembly: AssemblyProduct("MyAssembly")] [assembly: AssemblyCopyright("Copyright © MyCompany 2023")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")]  //将 ComVisible 设置为 false 将使此程序集中的类型 //对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型, //请将该类型的 ComVisible 特性设置为 true。 [assembly: ComVisible(false)]  // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]  // 程序集的版本信息由下列四个值组成: // //      主版本 //      次版本 //      生成号 //      修订版本 // // 可以指定所有值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]

在这个例子中,程序集的版本号被设置为

1.0.0.0

。注意

AssemblyFileVersion

通常也需要同步更新,但它更多是文件版本信息,与程序集加载关系不大。

自动生成Build和Revision号

你可以使用

*

来自动生成

Build

Revision

号。例如:

[assembly: AssemblyVersion("1.0.*")]

在这种情况下,

Build

号将自动设置为自2000年1月1日起的天数,

Revision

号将自动设置为自午夜起的秒数除以2。这对于自动构建过程非常有用。当然,这可能会导致一些不可预测性,在生产环境中使用时需要谨慎。

AssemblyVersion和AssemblyFileVersion的区别是什么?

这是一个常见的混淆点。

AssemblyVersion

是CLR用于加载和绑定程序集的版本号。

AssemblyFileVersion

是文件版本号,它用于显示在文件属性对话框中。虽然它们通常设置为相同的值,但它们实际上是独立的。

AssemblyFileVersion

可以更频繁地更新,而

AssemblyVersion

应该只在程序集发生重大更改时才更新,以避免破坏现有的绑定。

.NET的AssemblyVersionAttribute类如何定义版本号?

Waifulabs

一键生成动漫二次元头像和插图

.NET的AssemblyVersionAttribute类如何定义版本号?131

查看详情 .NET的AssemblyVersionAttribute类如何定义版本号?

版本冲突和程序集绑定

当多个版本的程序集存在时,可能会发生版本冲突。CLR使用程序集绑定来解决这些冲突。程序集绑定是CLR用来确定加载哪个版本的程序集的过程。可以通过配置文件

app.config

web.config

)来配置程序集绑定。例如,你可以指定CLR加载特定版本的程序集,或者将旧版本的程序集重定向到新版本。

强命名程序集

为了避免程序集名称冲突,你可以使用强命名程序集。强命名程序集使用私钥进行签名,并包含公钥令牌。这使得CLR可以唯一地标识程序集,并防止恶意程序集伪装成其他程序集。要创建强命名程序集,你需要使用

sn.exe

工具生成一个密钥对文件,然后在Visual Studio的项目属性中指定该文件。

版本控制策略

选择合适的版本控制策略非常重要。一种常见的策略是使用语义化版本控制(SemVer)。SemVer是一种版本控制规范,它使用

major.minor.patch

的格式来表示版本号,并定义了如何增加每个部分。例如,如果修复了Bug,那么应该增加

patch

号;如果添加了新功能,但是与之前的版本兼容,那么应该增加

minor

号;如果程序集发生了重大更改,或者与之前的版本不兼容,那么应该增加

major

号。

版本控制工具

使用版本控制工具(如Git)可以帮助你管理程序集的版本。版本控制工具可以跟踪代码的更改,并允许你回滚到之前的版本。这对于修复Bug和管理代码库非常有用。

总结

AssemblyVersionAttribute

是.NET中用于定义程序集版本号的关键属性。理解版本号的格式和作用,以及如何使用

AssemblyVersionAttribute

,对于版本控制和部署至关重要。同时,了解

AssemblyVersion

AssemblyFileVersion

的区别,以及程序集绑定和强命名程序集的概念,可以帮助你更好地管理程序集,并避免版本冲突。使用版本控制工具和选择合适的版本控制策略,可以进一步提高版本管理的效率和质量。

.net git app 工具 配置文件 区别 字符串 git visual studio bug

上一篇
下一篇