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

The specified version string does not conform to the required format - major[.minor[.build[.revision]]]

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

在 AssemblyInfo 中进行设置时,出现以下编译错误:

Error CS7034 The specified version string does not conform to the required format - major[.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")]

为什么会这样?

It's because each number in the version is a ushort!可惜了。

任何一个部分的最大值都是 65534,如您所见 here。这是操作系统强加的限制,因此甚至不特定于 .NET。 Windows 将版本号放入两个整数中,它们一起形成四个无符号短整数。

Adding some metadata to it (for the * option I guess) makes the maximum allowed value UInt16.MaxValue - 1 = 65534 (Thanks to Gary Walker注意):

All components of the version must be integers greater than or equal to 0. Metadata restricts the major, minor, build, and revision components for an assembly to a maximum value of UInt16.MaxValue - 1. If a component exceeds this value, a compilation error occurs.

您的 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 文件中,您必须将 Deterministic 设置为 false。然后在 Build 或 Revision 中接受编译器 '*'。

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

error CS7034: The specified version string does not conform to the required format

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

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

在某些情况下,可能会在项目属性中启用 Treat warnings as errors,而 1.3.0-4011 等版本将导致以下错误:

Properties\AssemblyInfo.cs(35,32): error CS7035: The specified version string does not conform to the recommended format - major.minor.build.revision

因此您可以使用 Visual Studio 更改它,方法是选择 None 或在 .csproj 文件中将 TreatWarningsAsErrors 设置为 false

  <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>