четверг, 25 февраля 2010 г.

.NET получить номер версии

Задача Visual Studio не совсем вменяемым на мой взгляд( с помощью честно стыренного где-то JS скрипта и post-build Event) изменяет номер версии сборки. И вот мне захотелось его где-нибудь отобразить. Например мне очень часто приходится встречаться с такой ситуацией: приходит пользователь, говорит: "У меня вот то-то и то-то в программе не работает, а у Васи/Пети/etc. - работает." Теперь ответ на такой вопрос скорее всего сведётся к следующему: "а какую версию используете? посмотри в заголовке окна(например),1.0.0.0, ага, а Вася с Петей и Etc уже давно перешли 2.12.365.98729, и там эта функциональность была реализована".

Короче гордиться особо нечем, всё как обычно до безобразия просто, даже глупо было гуглить такое:
System.Reflection.Assembly.GetCallingAssembly().GetName().Version.ToString(3)

* This source code was highlighted with Source Code Highlighter.

Да, совсем забыл, короче в этом примере мне надо вывести только 3 "разряда", номер ревизии врят-ли кого-то волнует

четверг, 4 февраля 2010 г.

Serialization .net( основные требования)

Всё чаще стал использовать XML не только как хранилище контента, но и для хранения настроек программ.
Сейчас после того, как очередной раз поймал InvalidOperationException при сериализации решил написать для себя список требований к объекту:
1) должен иметь атрибут
[Serializable]
* This source code was highlighted with Source Code Highlighter.
2)Должен иметь конструктор по-умолчанию(без параметров)

Из основного вроде всё, если вспомню чего, потом допишу.

теперь частности:
если необходимо сериализовать класс-наследник, то у базового класса надо с помощью атрибута XmlInclude перечислить ему(базовому) все типы наследников примерно так:
[XmlInclude(typeof(Information)), XmlInclude(typeof(Episode))]
public abstract class Element


* This source code was highlighted with Source Code Highlighter.

очень хорошо сериализуются коллекции, я использую List, но думаю и с другими проблем быть не должно.Вот пример списка, где в качестве типа T - абстрактный класс:
[XmlArrayItem(typeof(Information)), XmlArrayItem(typeof(Episode))]
public List<Element> Actions


* This source code was highlighted with Source Code Highlighter.
Просто указываем с какими элементами может иметь дело List