AssemblyInfo: 让 .NET 程序的版本管理更简单
随着互联网技术的发展,软件开发的速度和数量都在不断地增长。面对如此多的软件,如何管理版本是每个开发者都必须面对的问题。在 .NET 开发中,Version 及 AssemblyFileVersion 是非常重要的标识。在实际开发过程中,我们需要多次修改 Version 及 AssemblyFileVersion,而每次修改都需要手动修改 AssemblyInfo.cs 文件,这样的操作难免会让程序员经常出现“手滑”的情况。本文将介绍一些常用的方式,来让处理 AssemblyInfo.cs 文件更简单和方便。
1. 使用 Visual Studio 特性
Visual Studio 在项目属性窗口提供了对于 AssemblyInfo.cs 文件的编辑功能,并提供一些便利的特性来自动修改这些信息。 如下图所示:
[图片]
在这里,我们可以依次修改 程序集名称、版本号等。 如果“使用 '*' 版本通配符”是勾选的,那么 AssemblyVersion 和 AssemblyFileVersion 将被设置为“*”(星号),这意味着它们将始终自动递增版本号,当我们编译项目时就可以自动更新程序集版本。但这里存在一个问题:如果使用星号变量来修订 AssemblyVersion 的版本号,每次编译时都会导致程序集版本的变化,即便我们的代码完全相同。
2. 通过脚本自动化修改 AssemblyInfo.cs 文件
如果你试图在命令行或脚本中构建和发布批量应用程序,那么手动修改 AssemblyInfo.cs 文件肯定不是一个好选择。 比较好的方案是通过脚本自动修改文件中的信息。在 .NET Core 项目中,我们可以使用 PowerShell 脚本实现。
首先,在项目根目录下创建一个名为“Set-AssemblyInfo.ps1”的 PowerShell 脚本文件。以下为示例文件中给版本号添加了次要编号。
```powershell
# usage: powershell .\\Set-AssemblyInfo.ps1 1.1.0
$version = $args[0].Split('.')
$content = [IO.File]::ReadAllText('AssemblyInfo.cs')
$content -match '(?<=AssemblyFileVersion\\(\"[0-9.]*).*(?=\"\\))'
$build = $Matches.Value
$version[2] = $build + 1
$versionString = $version -join \".\"
$content -replace '(?<=AssemblyFileVersion\\(\")[0-9.]*', $versionString | Set-Content 'AssemblyInfo.cs'
```
更多的 PowerShell 脚本示例可以在 .NET Core 官网获得。
3. 使用 NuGet 包维护程序集信息
除了自己写脚本来修改,还有一种更令人喜欢的方案:就是使用第三方 NuGet 包来实现。
以下是四个我们强烈推荐的 NuGet 包。
- [Nerdbank.GitVersioning](https://www.nuget.org/packages/Nerdbank.GitVersioning/)
这个 NuGet 包的最大特点在于多样性,既可以使用单一的 AssemblyInfo 文件,也可以在多个程序集之间共享程序集信息。该 NuGet 包可以自动根据 Git 版本生成 AssemblyVersion、AssemblyFileVersion,并基于 Git hash 生成了一些额外的标识。由于该 NuGet 包是以直接将 Git 中的信息注入到程序集中,所以这个特性非常稳定,十分适合使用 Git 进行版本控制的项目。
- [GitInfo](https://www.nuget.org/packages/GitInfo/)
GitInfo 则是在 StringWriter 中编写了格式化为 C# 代码的信息,然后将其放在 AssemblyInfo.cs 文件的底部。这有利于那些不在使用 Git 作为源代码管理工具的项目,但是如果您使用的是 SVN 或 Mercurial,那么该 NuGet 包可能就没有什么用处了。
- [GitVersionTask](https://www.nuget.org/packages/GitVersionTask/)
该 NuGet 包适合那些正在使用 MSBuild 的项目,可以通过添加 MSBuild 元素来自动更新程序集的版本。在我们的 MSBuild 文件中引入该包后,就可以使用类似以下的元素:
```xml
```
- [AssemblyInfoPatcher](https://www.nuget.org/packages/AssemblyInfoPatcher/)
该 NuGet 包与 GitVersionTask 包类似,提供了一些元素,可以自动更新程序集版本。 该包适合那些不想引用 GitVersionTask 包或不想在此基础上修改组织程序集版本的项目。
需要注意的是,以上几种 NuGet 包都有其适用的范围,比如 Nerdbank.GitVersioning 算是最全面的选择,但其必须适用于基于标准文件结构的 .NET Core 项目。
总结
管理版本和程序集信息是比较重要和繁琐的工作。本文介绍了一些常用的方式,让使用者可以在不同的方向上选择自己最喜欢的方式,并且在实际开发过程中不断优化自己的做法,提高效率。
AssemblyInfo.vb:在VB项目中创建自定义程序集信息
在VB项目中,程序集是随着应用程序一起部署的一个.dll文件,它包括应用程序所需的运行时文件。程序集信息是指程序集的元数据,其中包含程序集的名称、版本号、作者、版权等信息。在本文中,我们将介绍如何在VB项目中创建自定义程序集信息。
一、理解程序集信息
在VB项目中,程序集信息存储在AssemblyInfo.vb文件中。这个文件存储了程序集的元数据,包括以下信息:
1.程序集的版本号
这是程序集的唯一标识符,用来区分不同版本的程序集。每当程序集发生变化时,都应该更新版本号。程序集的版本号是由四个数字组成,分别为主版本号、次版本号、修订号和构建号。例如,版本号为1.2.3.4,表示主版本号为1,次版本号为2,修订号为3,构建号为4。
2.程序集的名称
程序集的名称是一个字符串,用来唯一地标识程序集。通常情况下,程序集的名称与项目的名称相同。
3.程序集的描述
程序集的描述是一个字符串,用来描述程序集的功能和作用。
4.程序集的版权信息
程序集的版权信息是一个字符串,用来说明程序集的版权归属。通常情况下,版权信息包括作者、版权信息和联系方式。
5.程序集的属性
程序集的属性是一组键值对,用来存储程序集的元数据。通常情况下,属性包括COM可见性、GUID和CLS兼容性等。
二、添加程序集信息
要添加程序集信息,首先需要在VB项目中找到AssemblyInfo.vb文件。打开此文件后,可以看到以下代码:
这里的各个属性都是用引号包围的空字符串,表示程序集的相关信息尚未设置。要添加程序集信息,可以按照以下步骤进行操作:
1.设置程序集的名称和描述。例如,将程序集的名称设置为“HelloWorld”,描述为“这是一个演示程序集”:
2.设置程序集的版本号。例如,将程序集的版本号设置为1.0.0.0:
3.设置程序集的版权信息。例如,将程序集的作者设置为“Linda”,版权信息为“Copyright © Linda 2019”。
4.设置程序集的属性。例如,将程序集设置为COM可见,设置程序集的GUID为“{8E3BD3A3-80B9-49A1-9D63-21F79008A47E}”,设置程序集为CLS兼容:
三、总结
在VB项目中,程序集信息可以帮助我们管理应用程序的元数据,同时也方便了其他开发人员使用我们的程序集。本文介绍了程序集信息的相关内容,希望可以对您有所帮助。如果您还有其他问题,欢迎在评论区留言。