Приложение C# - пользовательский формат версии сборки

Возможно, это немного странно, но в настоящее время мы изучаем возможность реализации пользовательского формата для информации о сборке для проекта.

В информации о сборке вам предоставляется опция системы из 4 чисел, так что major.minor.build.revision

Меня попросили попробовать изменить это на систему из 5 чисел, так что-то вроде 1.2.34.556.1234 и интересно, возможно ли это вообще.

Я просто попытался просто изменить его программно, но это просто возвращает ошибку:

Error emitting 'System.Reflection.AssemblyVersionAttribute' attribute -- 'The version specified '1.2.34.556.1234' is invalid'

3 ответа

Решение

Для этого я предпочитаю использовать AssemblyFileVersion вместо AssemblyVersion,

Первый имеет открытый формат и может вместить практически любую дополнительную информацию, тогда как последний, AssmeblyVersion предназначен для использования.NET Framework и обеспечивает строгую схему нумерации, которая приводит к ошибкам компилятора при нарушении.

[assembly: AssemblyVersion("4.0.*")] //Strict Format, for framework use
[assembly: AssemblyFileVersion("4.0.20.110708")]    //Flexible Format more suitable for product versions

Обновление: согласно комментарию OP, вот как можно легко получить доступ к этому атрибуту с помощью отражения:

Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;

Это не будет работать, потому что конструктор для AssemblyVersionAttribute принимает до 4 значений в строке.:

Формат строки версии: основной. незначительный. строить. пересмотр.

MSDN Link

AssemblyVersionAttribute преобразуется в класс Version.

Он имеет только основной, вспомогательный, номер сборки, номер редакции: вы не можете использовать 5 номеров.

Если вы хотите использовать больше чисел, вы можете использовать AssemblyInformationalVersion

Это не Version Class но string для более информативного управления версиями сборки:

[assembly: AssemblyInformationalVersion("1.12.0.3050.1234 Release - Any CPU")]

Но вы должны предоставить в любом случае AssemblyVersion и / или AssemblyFileVersion без 5го числа

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