Автоназначение версии сборки NET
Достаточно долго мучался с версиями сборок (особенно с сервисными сборками) - точнее, с автоназначением их версий. Если сборка на NET, а не Framework.
Спасибо доктору - он показал, что в .csproj достаточно добавить 4 строки:
1 2 3 4 | <Deterministic>False</Deterministic> <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute> <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute> <AssemblyVersion>1.0.*</AssemblyVersion> |
И все, номер сборки и номер ревизии назначаются автоматом. Правда, с мажорными / минорными версиями придется ковыряться вручную
Билд и ревизию можно опять развернуть в дату время компиляции
/// Дата сборки
public string sDateRelis()
{
DateTime result = new DateTime(2000, 1, 1);
result = result.AddDays(iBuild);
result = result.AddSeconds(iRevision * 2);
#if DEBUG
return result.ToString();
#else
return result.ToLongDateString();
#endif
}
https://github.com/doctorRaz/Infrastructure-library/blob/main/src/Service/AsmInfo.cs
Если честно, сейчас пытаюсь сообразить, что я делал почти две недели назад, и оценить ценность и нужность твоего кода я просто не в силах. Мне кажется, что твой класс как-то не совсем версию файла-то показывает
Пара предложений, если позволишь
Насколько я помню, у Version тьма переопределений для вывода в строку. И это как бы намек, что (возможно) имеет смысл отказаться от повсеместного применения строк ))
И я не уверен, что конструкция типа
public string sDescription => (Attribute.GetCustomAttribute(
asm,
typeof(AssemblyDescriptionAttribute),
false) as AssemblyDescriptionAttribute).Description;
будет всегда и корректно работать: преобразование в AssemblyDescriptionAttribute может и null вернуть. Так что я б, наверное, делал наподобие
public string sDescription => (Attribute.GetCustomAttribute(
asm,
typeof(AssemblyDescriptionAttribute),
false) as AssemblyDescriptionAttribute)?.Description ?? string.Empty;
Согласен на null проверки нужны
Код выше вытаскивает из билда дату, из ревизии время компиляции.
Иногда это удобно при отладке, было у меня отлаживал одно, а грузил другое))
Ну, до такого я еще не дорос )))