前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET 程序集/项目/包的版本号设置有最大范围,最大不能超过 65534

.NET 程序集/项目/包的版本号设置有最大范围,最大不能超过 65534

作者头像
walterlv
发布2023-10-22 11:35:36
3120
发布2023-10-22 11:35:36
举报
文章被收录于专栏:walterlv - 吕毅的博客

试过给 .NET Core 项目设置一个大于 65535 的版本号吗?可能没有,因为设置了会炸!

最简问题项目

用最普通的项目模板创建一个 .NET 项目(要求是 SDK 风格的),于是,你会得到两个文件:项目文件 Walterlv.Demo.csproj 和代码文件 Class1.cs。

Walterlv.Demo.csproj:

1 2 3 4 5

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> </Project>

Class1.cs 应该不用贴出来了,因为没啥关系。

现在,我们加个版本号:

1 2 3 4 5 6

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> ++ <Version>1.0.0.65535</Version> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> </Project>

一编译就立刻编译错误:

编译错误
编译错误

然而,只要把版本号改到 65534 或者更小的值就没有问题。

因为我们可以知道,在 SDK 风格的项目当中,版本号的任何一位的范围只能是 0~65534。

传统项目没问题

你可能会说,创建了一个 .NET Framework 的项目,并没有出现问题。

那是因为此问题的复现要求:

  1. 必须是 SDK 风格的项目(.NET Core 默认的风格,也可用于 .NET Framework);
  2. 必须是通过 .csproj 或者 .props / .targets 文件来指定的版本号。

这两个条件缺一不可。而通过模板创建的 .NET Framework 项目默认使用的是传统风格的 csproj 项目文件。

如果是传统风格的项目,必须使用 AssemblyInfo.cs 来指定版本号;新的 SDK 风格的版本号也可以使用 AssemblyInfo.cs 来指定版本号。而这两种情况的版本号范围是整个 int 范围(0~2G)。

附,在 SDK 风格项目中使用 AssemblyInfo.cs 来指定版本号前,你需要先用以下属性关闭默认自动生成 AssemblyInfo.cs 功能:

1 2 3 4 5 6

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> ++ <GenerateAssemblyInfo>False</GenerateAssemblyInfo> </PropertyGroup> </Project>

谁的限制?

实际上,版本号限制是 Windows 系统带来的,Windows 系统限制到 65535 了。

虽然你可以通过以上 AssemblyInfo 的方法绕过编译错误,但实际上生成的文件版本会溢出:

溢出的版本号
溢出的版本号

.NET 运行时是可以支持 int 范围的版本号的,无奈兼容 Windows 的部分却不行。

参考资料

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/dotnet-version-number-too-large.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected])

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最简问题项目
  • 传统项目没问题
  • 谁的限制?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档