我在 MSBuild 中有一个构建脚本,它会自动检索当前签出的 git 提交,然后在构建时将这样的属性添加到程序集:
[assembly: AssemblyInformationalVersion("0.2.13+e3a6f2c1")]
[assembly: AssemblyVersion("0.2")]
[assembly: AssemblyFileVersion("0.2.13")]
版本的数字部分来自我的构建脚本读取的 version.txt 文件。
程序集版本缺少第 3 个八位字节,因为它在您增加内部版本号时避免了绑定重定向要求。AssemblyFileVersion 包含该属性允许的所有数据,AssemblyInformationVersion 可以是您想要的任何字符串,因此使用语义版本控制来包含 git commit id 允许您准确指示构建此项目的源版本。
然后在构建成功后,您可以根据需要添加 v0.2.13 标签。就个人而言,一旦我构建了最终版本,我就会增加 version.txt 文件,以便所有后续构建都具有下一个更高的版本号。之后的每个构建都将具有该版本,直到我发布该版本,标记提交,再次增加 version.txt 文件并重复。
顺便说一句,该AssemblyInformationalVersion
字符串出现在 Windows 资源管理器的文件属性中,因此这提供了一种从任意构建的二进制文件到匹配的原始源代码的有保证的方法。此外,不幸的是,这种方法会导致 csc.exe 报告 AL???? 构建警告,因为语义版本格式不符合 xyz 语法。但这并不意味着任何东西都被破坏了,我只是忽略了警告。
我从不明确压缩源代码,因为这与源代码控制的责任是多余的。至少如果您的源代码是由某些在线服务托管的(甚至是在您的私有 Intranet 上),大多数 git 主机已经为给定的提交 ID 提供了即时下载为 zip 的功能。