Dotnet构建版本号报错:四段数值类型是否固定为UNSIGNED16?
问题描述
我有一款应用,使用以下命令可成功构建:
dotnet build /p:Version=1.2.3.65534 LicenseReporter.csproj
但使用如下稍有差异的命令构建时:
dotnet build /p:Version=1.2.3.65535 LicenseReporter.csproj
出现编译时错误:
T:\Development\License Reporter\obj\Debug\net6.0-windows\LicenseReporter.AssemblyInfo.cs(20,55): error CS7034: The specified version string does not conform to the required format - major[.minor[.build[.revision]]] [T:\Development\License Reporter\LicenseReporter.csproj]
请问版本号的四个数值字段类型是否固定为UNSIGNED16,还是可以修改?
解答
在.NET的程序集版本规范中,版本号的四个字段(主版本、次版本、构建版本、修订版本)确实固定为无符号16位整数(UInt16)的范围,但实际有效值是0到65534——这就是你使用65535触发编译错误的原因。
这个限制是.NET框架对程序集版本的硬性规范,无法直接修改。因为程序集版本是CLR识别程序集的核心标识之一,CLR内部用UInt16类型存储这四个字段,超出范围的数值会直接触发格式校验错误。
如果需要使用更大的版本号数值,你可以考虑两种替代方案:
- 改用文件版本(FileVersion):文件版本的每个字段支持32位整数范围,数值上限远高于程序集版本;
- 分离产品版本与程序集版本:使用语义化版本号(SemVer)作为对外展示的产品版本,而程序集版本保持在0-65534的规范范围内。
内容的提问来源于stack exchange,提问作者Brian THOMAS
相关产品推荐
相关产品推荐

