指定的版本字符串不符合所需的格式-main [ . small [ . build [ . version ]]]

我想附加我们的应用程序版本与构建号。例如,1.3.0.201606071

在 AssemblyInfo 中设置此值时,会得到以下编译错误:

错误 CS7034指定的版本字符串不符合 必需的格式-主要[。次要[。建立[。修订]]]

装配信息:

[assembly:System.Reflection.AssemblyFileVersionAttribute("1.0.0.201606071")]
[assembly:System.Reflection.AssemblyVersionAttribute("1.0.0.201606071")]
[assembly:System.Reflection.AssemblyInformationalVersionAttribute("1.0.0.201606071")]

为什么会这样?

44000 次浏览

在读取 给你时,这两个部分的最大值都是65534。这是操作系统强加的限制,因此甚至不是特定于。NET.Windows 将版本号放入两个整数中,这两个整数一起构成四个无符号短片。

给它添加一些元数据 (我猜是为 *选项添加的)使得允许的最大值 UInt16.MaxValue - 1 = 65534(感谢 Gary Walker注意到这一点) :

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

你的 201606071超过了这个限制。

此限制仅适用于程序集和文件版本,因此如果使用。Net Core 2.x 可以通过在 csproj 中为每个版本设置单独的版本来绕过这个限制。

</PropertyGroup>
<VersionPrefix>1.1.1.9000001</VersionPrefix>
<VersionSuffix>$(VersionSuffix)</VersionSuffix>
<AssemblyVersion>1.1.1.0</AssemblyVersion>
<FileVersion>1.1.1.0</FileVersion>
</PropertyGroup>

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

如果你的目标是 netcoreapp2.0,而根本没有 AssemblyInfo.cs,你可以修复

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

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

<PropertyGroup>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo>
<Deterministic>False</Deterministic>
</PropertyGroup>

在某些情况下,可能在项目属性中启用了 将警告视为错误,而像 1.3.0-4011这样的版本会导致以下错误:

Properties AssemblyInfo.cs (35,32) : error CS7035: 指定的版本字符串不符合推荐的格式-Major. minor.build.version

因此,您可以使用 VisualStudio 通过选择 None或在 .csproj文件中将 TreatWarningsAsErrors设置为 false来更改它。

Treat warnings as errors in project properties

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>

是的,你可以做到这一点(都在。NET 架构,并在。NET 核心) ,但不适用于 AssemblyVersionAttribute。

  • AssemblyVersionAttribute是唯一一个实际上被限制为4个 ushort值的值——如果你指定了更多的值,编译器就会向 error CS7034: The specified version string does not conform to the required format - major[.minor[.build[.revision]]]抱怨,而你对此却无能为力。
  • AssemblyFileVersionAttribute可以使用较大的值,例如用来编码日期值(例如,在一个 Semver 的 Patch 部分) ,但是将生成 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

对于.NET Core,您可以:

  • 禁用自动生成的程序集属性 ,并将这些属性包含在您自己的 AssemblyInfo.cs 中
  • 将版本保存在 csproj 文件中。在这种情况下,在“ Project properties”中的“ Build”下的“ Suppress spectivepolice”中,在要禁止的警告列表中包括“7035”。