指定的版本字符串不符合要求的格式 - 主要[.minor [.build [.revision]]]

Dav*_*New 39 .net c# assemblyinfo

我想使用内部版本号附加我们的应用程序版本.例如,1.3.0.201606071.

在AssemblyInfo中设置它时,我得到以下编译错误:

错误CS7034指定的版本字符串不符合所需的格式 - 主要[.minor [.build [.revision]]]

装配信息:

[assembly:System.Reflection.AssemblyFileVersionAttribute("1.0.0.201606071")]
[assembly:System.Reflection.AssemblyVersionAttribute("1.0.0.201606071")]
[assembly:System.Reflection.AssemblyInformationalVersionAttribute("1.0.0.201606071")]
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Pat*_*man 42

正如您在此处所读,其中任一部分的最大值为65534 .这是操作系统提出的限制,因此甚至不特定于.NET.Windows将版本号放入两个整数,它们共同形成四个无符号短路.

添加一些元数据(对于*我猜的选项)会产生最大允许值UInt16.MaxValue - 1 = 65534(感谢Gary Walker注意到):

版本的所有组件必须是大于或等于0的整数.元数据将程序集的主要,次要,构建和修订组件限制为最大值UInt16.MaxValue - 1.如果组件超过此值,则会发生编译错误.

201606071超过了这个限制.

  • 当我尝试使用新的_csproj_格式文件在.NET Core项目中设置星值(`1.0.*`)时,我遇到了这个问题,将`GenerateAssemblyInfo`设置为`false`.有任何想法吗?我希望在新的_csproj_格式文件的.NET Core/Standard项目中实现自动增量. (6认同)
  • @Shimmy你最后问这个问题了吗?你发现了什么? (2认同)
  • 我们需要一个“两全其美”的解决方案来实现程序集日期和程序集语义版本控制。1.yyyy.mmdd.buidNum (2认同)

Dav*_*New 8

这是因为版本中的每个数字都是ushort!这真遗憾.

  • @PatrickHofman - 是的,ushort限制为65535,但[内部版本号限制为65534](https://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx) (6认同)
  • 实际上它的 65534 不是 65535。 (2认同)
  • 哦,是的,你是对的@GaryWalker叹息 (2认同)

Dmi*_*lov 8

如果您定位netcoreapp2.0并且根本没有定位,则AssemblyInfo.cs可以修复

错误CS7034:指定的版本字符串不符合要求的格式

通过将其添加到您的.csproj文件中:

<PropertyGroup>
  <GenerateAssemblyInfo>False</GenerateAssemblyInfo>
  <Deterministic>False</Deterministic>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,问题是我的“.csproj”文件包含“&lt;Deterministic&gt;true&lt;/Deterministic&gt;”,但我的目标也是.Net 4.0。我删除了这个,编译器再次工作了。感谢您为我指明了正确的方向。 (5认同)
  • 这才是真正的答案。 (3认同)

小智 5

在 .csproj 文件中,必须将确定性设置为 false。然后在构建或修订中接受编译器“*”。


Ast*_*ain 5

是的,您可以对 AssemblyFileVersion 和 AssemblyInformationalVersion 执行此操作(在 .NET Framework 和 .NET Core 中),但不能对 AssemblyVersionAttribute 执行此操作。

  • AssemblyVersionAttribute唯一一个实际上限制为 4 个ushort值的值 - 如果您指定更多值,编译器会抱怨error CS7034: The specified version string does not conform to the required format - major[.minor[.build[.revision]]],并且您对此无能为力。
  • 可以AssemblyFileVersionAttribute与更大的值一起使用,例如用(例如在 semver 的补丁部分中)对日期值进行编码,但会生成warning CS7035: The specified version string does not conform to the recommended format - major.minor.build.revision. 幸运的是,因为这是一个警告,所以可以将其抑制(见下文)。
  • 不受AssemblyInformationalVersionAttribute任何限制,可以包含预发布语义版本,例如“ 1.2.6-CI20220906”,或任何其他随机字符串。

也就是说,以下内容将起作用:

#pragma warning disable CS7035 // The specified version string does not conform to the recommended format - major.minor.build.revision 

[assembly: AssemblyVersionAttribute("1.4.0.0")]
[assembly: AssemblyFileVersionAttribute("1.4.220831.0")]
[assembly: AssemblyInformationalVersionAttribute("1.4.220831-prerelease+build")]

#pragma warning restore CS7035
Run Code Online (Sandbox Code Playgroud)

对于 .NET Core,您可以:

  • 禁用自动生成的程序集属性并将这些属性包含在您自己的 AssemblyInfo.cs 中
  • 将版本保留在 csproj 文件中。在这种情况下,在“项目属性”中的“生成”下,“抑制特定警告”,在要抑制的警告列表中包含“7035”。