.NET:AssemblyVersionAttribute中的大型修订号

Ras*_*ber 38 .net c# svn version-control assemblyversionattribute

我们将我们的构建版本化为[major].[minor].[micro].[revision],例如2.1.2.33546.

我们的构建脚本自动更新包含的AssemblyInfo.cs文件

[assembly: AssemblyVersion("x.y.z.w")]
Run Code Online (Sandbox Code Playgroud)

为了在程序集中嵌入版本号.

但我们的Subversion-repository刚刚达到修订版#65535,这打破了我们的构建.

事实证明,版本号中的每个数字的最大值为65534(可能是由于Windows限制).

你遇到过这个问题吗?有什么好的解决方案/解决方法吗?

我们喜欢嵌入修订号的方案,我们显然不能只重置我们的Subversion服务器:-)

Mic*_*tum 43

多一点背景资料:

为什么内部版本号限制为65535?

由于这不太可能改变,您的选择是:

  • 采用Revision Modulo 65535,这意味着你回到了1
  • 使用版本号中的Micro-Field通过将版本除以1000来拆分版本号.这意味着您的版本可能是1.0.65.535
  • 不要将SVN版本存储在AssemblyVersion中,而是存储在AssemblyInformationalVersion中.这样,您的应用程序仍然可以访问它以用于显示目的,但您不能再使用Windows资源管理器来快速检查SVN修订版
  • 不要将SVN版本存储在AssemblyVersion中,而是存储在AssemblyProduct或AssemblyDescription字段中.同样,您的应用程序仍然可以访问它,但Explorer现在也会在属性表中显示它.

  • 如果将它放在AssemblyInformationalVerison中,则可以在Windows资源管理器的"产品版本"属性下看到它.所以这是一个不错的选择. (6认同)

Mar*_*ell 11

一种选择可能就是使用[AssemblyFileVersion]; 这仍然会引发警告,但它至少会构建:

[assembly: AssemblyFileVersion("1.0.0.80000")]
Run Code Online (Sandbox Code Playgroud)

  • 这已在更高版本的msbuild(4.0)中修复,不再发出警告. (4认同)

Bra*_*ger 8

我们决定使用相同的约定,由于Windows版本号的限制,我们选择删除版本号的"微"部分以保留版本号.我们的版本号现在是[major].[minor].[revision / 10000].[revision % 10000],因此从版本65535构建的程序集的版本为2.01.6.5535.

  • 如果这样做,请确保您不使用Windows安装程序中的"次要升级"(即升级,以避免完全卸载/重新安装).Windows安装程序将完全忽略第4版组件.如果您不再手动更新第3版组件以反映版本,则Windows安装程序可能无法更新某些文件. (9认同)
  • @Ray Hayes:我们的NAnt构建脚本使用`svn info.--xml`获取工作副本的修订号,然后调用自定义编写的实用程序将该修订输出到包含[AssemblyVersion]属性的"SolutionInfo.cs"文件中.此文件未添加到Subversion,但仅由解决方案中的所有项目引用(在VS中使用"Add As Link"),因此它们都使用最新版本号构建. (2认同)

Ore*_*ost 5

根据 MSDN,AssemblyVersionAttribute 版本号UInt16.MaxValue - 1 的组件受程序集元数据的限制,即您不能在程序集文件中存储更大的数字。文件版本,正如 Marc Gravell 所建议的,可能对你来说已经足够了,这取决于谁会阅读你的版本号。