Приложение 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 значений в строке.:
Формат строки версии: основной. незначительный. строить. пересмотр.
AssemblyVersionAttribute
преобразуется в класс Version.
Он имеет только основной, вспомогательный, номер сборки, номер редакции: вы не можете использовать 5 номеров.
Если вы хотите использовать больше чисел, вы можете использовать AssemblyInformationalVersion
Это не Version Class
но string
для более информативного управления версиями сборки:
[assembly: AssemblyInformationalVersion("1.12.0.3050.1234 Release - Any CPU")]
Но вы должны предоставить в любом случае AssemblyVersion
и / или AssemblyFileVersion
без 5го числа