Указанная строка версии не соответствует требуемому формату - major [.minor [.build [.revision]]]

Я хочу добавить нашу версию приложения с номером сборки. Например, 1.3.0.201606071.

При установке этого в AssemblyInfo я получаю следующую ошибку компиляции:

Ошибка CS7034 Указанная строка версии не соответствует требуемому формату - 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")]

Почему это происходит?

Ответ 1

Максимальное значение для любой из частей составляет 65534, как вы читаете здесь. Это ограничение, создаваемое операционной системой, поэтому даже не характерно для.NET. Windows помещает номера версий в два целых числа, которые вместе образуют четыре беззнаковых шорт.

Добавление к нему некоторых метаданных (для опции * я думаю) делает максимально допустимое значение UInt16.MaxValue - 1 = 65534 (спасибо Гэри Уокеру за замечать):

Все компоненты версии должны быть целыми числами, большими или равными 0. Метаданные ограничивают основные, второстепенные, UInt16.MaxValue - 1 и ревизионные компоненты для сборки максимальным значением UInt16.MaxValue - 1. Если компонент превышает это значение, возникает ошибка компиляции.

Ваш 201606071 превышает этот предел.

Ответ 3

Это ограничение применяется только к версии Assembly и File, поэтому, если вы используете.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>

Ответ 4

В файле.csproj необходимо установить Definistic в false. Затем принимает компилятор '*' в сборке или редакции.