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 эти имена не указаны).