CS1607: Генерация сборки - версия "1.4.0.85725", указанная для "версии файла", не в обычном формате "major.minor.build.revision"

(Пожалуйста, извините, если я здесь перепутал какие-либо термины - я разработчик Java, новичок в.Net и C#. Пожалуйста, добавьте / исправьте любые теги по этому вопросу, если это будет необходимо.)

Я использую скрипт MSBuild для создания своего проекта. Одна из задач - написать информацию о сборке:

<Target Name="UpdateAssemblyInfo">
    <Message Text="Updating assemblies to file version $(AssemblyVersion) ($(AssemblyFileVersion))" Importance="high"/>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="SharedAssemblyInfo.cs" 
                  AssemblyVersion="$(AssemblyVersion)"
                  AssemblyFileVersion="$(AssemblyFileVersion)"
                  AssemblyProduct="SVN revision $(BUILD_NUMBER)"/>
</Target>

Это преобразует SharedAssemblyInfo.cs из этого:

[assembly: System.Reflection.AssemblyVersion("0.0.0")]

К этому:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.18063
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

[assembly: System.Reflection.AssemblyVersion("1.4.0")]
[assembly: System.Reflection.AssemblyFileVersion("1.4.0.85725")]
[assembly: System.Reflection.AssemblyProduct("SVN revision 85725")]

Все идет нормально. За исключением того, что я вижу следующее сообщение в журнале сборки TeamCity:

Предупреждение CSC CS1607: Генерация сборки - версия "1.4.0.85725", указанная для "версии файла", не в обычном формате "major.minor.build.revision"

Почему я получаю это предупреждение, когда формат версии соответствует формату, указанному в сообщении с предупреждением?

2 ответа

Решение

Причина, по которой вы получаете ошибку, заключается в том, что номер ревизии больше 65534.

Почему я получаю это предупреждение, когда формат версии соответствует формату, указанному в сообщении с предупреждением?

Перечитайте это предупреждение с добавлением акцента:

нормальный 'major.minor.build. формат ревизии

Номера версий.NET имеют ЧЕТЫРЕ части, а не три.

System.Version Используемый для этого тип будет обрабатывать версии меньшего числа типов, но это возможно для кода, использующего System.Version проверить и быть более строгим.

Дополнительные, как отметил Михай, элементы версии ограничены System.UInt16.MaxValue (65535): это ограничение Windows API (в System.Version каждый элемент является System.Int32) родственные VS_FIXEDFILEINFO 1 ресурс, который компилятор вставляет в сборку из различных атрибутов сборки. Это позволяет таким инструментам, как Windows Explorer, читать версию.

Резюме:

  • В версии должно быть четыре части.
  • Каждая часть должна быть в диапазоне [0, 65535].

1 Версия хранится в двух DWORD члены: один для главных и второстепенных частей, другой для сборки и ревизии (хотя в Win32 эти имена не указаны).

Другие вопросы по тегам