Reputation: 40092
I want to append our application version with the build number. For example, 1.3.0.201606071
.
When setting this in the AssemblyInfo, I get the following compilation error:
Error CS7034 The specified version string does not conform to the required format - major[.minor[.build[.revision]]]
Assembly info:
[assembly:System.Reflection.AssemblyFileVersionAttribute("1.0.0.201606071")]
[assembly:System.Reflection.AssemblyVersionAttribute("1.0.0.201606071")]
[assembly:System.Reflection.AssemblyInformationalVersionAttribute("1.0.0.201606071")]
Why would this be happening?
Upvotes: 93
Views: 63920
Reputation: 335
In my case i needed to move the Dockerfile file to SOlution Items folder which was defined on the base folder of the solution
Upvotes: 0
Reputation: 4382
Yes you can do it (both in .NET Framework and in .NET Core) for the AssemblyFileVersion and AssemblyInformationalVersion, just not for the AssemblyVersionAttribute.
AssemblyVersionAttribute
is the only one that's actually limited to 4 ushort
values - if you specify anything more the compiler will complain with error CS7034: The specified version string does not conform to the required format - major[.minor[.build[.revision]]]
, and there is nothing you can do about it.AssemblyFileVersionAttribute
can be used with larger values, e.g. to encode date values with (for example in the Patch part of a semver), but will generate warning CS7035: The specified version string does not conform to the recommended format - major.minor.build.revision
. Luckily, because it's a warning, it can be suppressed (see below).AssemblyInformationalVersionAttribute
isn't constrained to anything and can contain a prerelease semver like "1.2.6-CI20220906
", or any other random string really.That is, the following will work:
#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
For .NET Core, you can either:
Upvotes: 8
Reputation: 138
In some cases maybe Treat warnings as errors is enabled in project properties and versions like 1.3.0-4011
will cause following error:
Properties\AssemblyInfo.cs(35,32): error CS7035: The specified version string does not conform to the recommended format - major.minor.build.revision
So you can Change it using Visual Studio by selecting None
or by setting TreatWarningsAsErrors
to false
in .csproj
file.
<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>
Upvotes: 1
Reputation: 157098
The maximum value for either of the parts is 65534, as you read here. This is a limit imposed by the operating system, so not even specific to .NET. Windows puts the version numbers into two integers, which together form four unsigned shorts.
Adding some metadata to it (for the *
option I guess) makes the maximum allowed value UInt16.MaxValue - 1 = 65534
(Thanks to Gary Walker for noticing):
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.
Your 201606071
exceeds this limit.
Upvotes: 102
Reputation: 28320
If you are targeting netcoreapp2.0
and don't have AssemblyInfo.cs
at all you can fix
error CS7034: The specified version string does not conform to the required format
by adding this into your .csproj
file:
<PropertyGroup>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo>
<Deterministic>False</Deterministic>
</PropertyGroup>
Upvotes: 41
Reputation: 51
In the .csproj file you must set Deterministic to false. Then accepts the compiler a '*' in the Build or Revision.
Upvotes: 5
Reputation: 659
This limitation only applies to the Assembly and File version so if you are using .Net Core 2.x you can get around this limitation by settings a separate version of each in the csproj.
</PropertyGroup>
<VersionPrefix>1.1.1.9000001</VersionPrefix>
<VersionSuffix>$(VersionSuffix)</VersionSuffix>
<AssemblyVersion>1.1.1.0</AssemblyVersion>
<FileVersion>1.1.1.0</FileVersion>
</PropertyGroup>
Upvotes: 1
Reputation: 40092
It's because each number in the version is a ushort! That's a pity.
Upvotes: 17