Был бы дизайнер для WPF-приложений…
Да, я б с удовольствием поручил его кому-то интегрировать.
Директива {$description ‘’}
Короче, всё, что нужно сделать:
в TreeConverter\TreeConversion\compiler_string_consts.cs в 340-ую строку добавить
public static string description_string = "description";
в Compiler\Compiler.cs в строку 1922 добавить:
if (compilerDirectives.TryGetValue(TreeConverter.compiler_string_consts.description_string, out cds))
{
cdo.Description = cds[0].directive;
}
в 1986-ую:
if (!string.IsNullOrEmpty(project.description))
cdo.Description = project.description;
в 2012-ой надо заменить sw.WriteLine("VALUE \"FileDescription\"," + "\"" + "" + "\"");
на sw.WriteLine("VALUE \"FileDescription\"," + "\"" + cdo.Description + "\"");
В Compiler\ProjectInfo.cs в 33-ю строку:
private string _description;
в 194-ой организовать свойство по тому полю:
public string description
{
get
{
return _description;
}
set
{
_description = value;
}
}
в 483-ю добавить:
writer.WriteAttributeString("Description", description);
и в 549-ую:
description = reader.GetAttribute("Description");
if (description == null) description = "";
в NETGenerator\NETGenerator.cs в 89-ую:
private string _Description = "";
public string Description
{
get { return _Description; }
set { _Description = value; NeedDefineVersionInfo = true; }
}
и последнее – необходимо как-то записать описание в сборку, с этим я не разобрался.
Вроде это всё, что требуется.
А почему не пулл реквестом?
Потому что гитхаб “хорошо” показывает изменения в файлах: Да и я так и не разобрался как впилить описание в итоговую сборку.
Да-да. А потом что-то где-то вылезет в другом месте и разработчики будут еще полгода выковыривать баги на основе полсотни issure, которые им радостно нарисуют добрые люди. Зато будет удовлетворена сомнительная хотелка.
Потому что не против твоей хотелки сейчас высказывания летят.
Я всё готов протестировать. Вряд ли добавление описания процессу может повлечь за собой какие-то критические ошибки.
Это хорошо, что готовы. Тогда тестируйте. Только, разберитесь с тем, с чем ещё не разобрались.
Пока это все - “сотрясания воздуха”. Разработчики по Вашему предложению не отписались, а тут главное - это их мнение.
Вообще, вроде бы так можно запихать описание:
var descbyte = new byte[options.Description.Length * 2];
int id = 0;
foreach (char element in options.Description)
{
var ord = BitConverter.GetBytes(element);
descbyte[id] = ord[0]; descbyte[id + 1] = ord[1];
id += 2;
}
ab.SetCustomAttribute(typeof(System.Reflection.AssemblyDescriptionAttribute).GetConstructor(new Type[] { typeof(string) }), descbyte);
Ничего не падает, но и описания оно не даёт. Что-то я делаю не так.
Может я что то не понял, но ты вызываешь .GetConstructor
, но не вызываешь полученный конструктор, в итоге передавая в SetCustomAttribute
первым параметром System.Reflection.ConstructorInfo
(или какой у него там тип).
А, вижу… Там так и надо… А ты пробовал использовать первую перегрузку SetCustomAttribute? На msdn для неё хоть примеры есть, а массив байт - как ты знаешь как правильно в него сериализовать строку?
Я и не знаю) в BitConverter.GetBytes нет перегрузки для string.
Ну дык. Я так понял ты в юникоде раскладываешь каждый символ на 2 байта и потом всё вместе соединяешь. Вот только что то мне подсказывает что ему нужна строка в ANSI, при чём нуль-терминированная. А может и ещё что.
Страшновато такое заливать. Всё удалил, потом всё вставил. Или не всё ))
Сделано:
Огромное спасибо @Sun_Serega и @Raevski.
Для просмотра изменений – смотрите коммит “Директива {$Title ’ '}”, другой коммит “исправляет” кодировку (можно ли это назвать исправлением? (с) @Sun_Serega).
Желательно принять как можно быстрее, так как в Compiler.cs очень часто вносятся изменения.
На баги протесчено (хотя там и нечему ломаться).