Конфигурирование .NET-приложений
От: Андрей Корявченко Россия http://blogs.rsdn.org/avk
Дата: 14.06.03 18:50
Оценка: 1209 (41) +1 -1
Статья :
Конфигурирование .NET-приложений
Автор(ы): Андрей Корявченко
Дата: 12.05.2003
Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru.


Авторы :
Андрей Корявченко

Аннотация :
Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....
AVK Blog
Re: Конфигурирование .NET-приложений
От: Mikhail_T  
Дата: 14.06.03 19:00
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....



А почему не использовались уже сушествующие механизмы конфигурации ?
Re[2]: Конфигурирование .NET-приложений
От: Mika Soukhov Stock#
Дата: 14.06.03 19:11
Оценка:
Здравствуйте, Mikhail_T, Вы писали:

M_T>Здравствуйте, Андрей Корявченко, Вы писали:


АК>>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....



M_T>А почему не использовались уже сушествующие механизмы конфигурации ?


Советую прочитать статью.
Re: Конфигурирование .NET-приложений
От: VBez  
Дата: 01.10.03 12:44
Оценка: :)
Здравствуйте, Андрей Корявченко, Вы писали:
АК>Конфигурирование .NET-приложений
АК>Аннотация :
АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....

Классная статья.
Но есть несколько мелких шероховатостей
Почему бы вместо Singleton не использовать Double-Checked Locking
и не сделать все методы в классе Config статическими.
Ну и в
public static Config GetClone()
{
  return (Config)instance.MemberwiseClone();
}

заменить instance на Instance?
Побольше таких статей.
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.10.03 18:59
Оценка:
Здравствуйте, VBez, Вы писали:

VB>Почему бы вместо Singleton не использовать Double-Checked Locking


Ну как бы задача работы в многопоточном режиме не рассматривалась, поэтому не было никакого желания загромождать код ненужными наворотами.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re[3]: Конфигурирование .NET-приложений
От: VBez  
Дата: 02.10.03 07:07
Оценка:
AVK>Ну как бы задача работы в многопоточном режиме не рассматривалась, поэтому не было никакого желания загромождать код ненужными наворотами.


А тогда к чему выделенное?
public class Config
{
   private static object lockFlag = new object();
   public static Config Instance
   {
      ...
      lock(lockFlag)
      {
         ...
      }
   }
}
Re[4]: Конфигурирование .NET-приложений
От: Sinatr Германия  
Дата: 02.10.03 07:22
Оценка:
Привет!

VB>А тогда к чему выделенное?


Ну а может "задача работы в многопоточном режиме" сначала рассматривалась, а потом перестала рассматриваться, чтобы не "загромождать код ненужными наворотами"? Статья — бомба, идея — супер! Где тут можно получить распечатанную копию с автографом автора? Шутки-шутками, а статья — действительно очень нужная и полезная, побольше бы таких.
---
ПроГLамеры объединяйтесь..
Re[4]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.10.03 07:22
Оценка:
Здравствуйте, VBez, Вы писали:

VB>А тогда к чему выделенное?


Баги в статье. Код выдернут из реального проекта.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re: Конфигурирование .NET-приложений
От: фонарь Беларусь блог
Дата: 22.10.03 16:01
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Статья :



АК>Авторы :

АК>Андрей Корявченко

АК>Аннотация :

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....

вот захотелось мне передать эти настройки в PropertyGrid через Remoting.
и вываливается exception, дескать, AttributeCollection is not marked as serializable (это при реализации ICustomTypeDescriptor, т.к. без него вообще не захотело).

вообще, это можно обойти?
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.10.03 05:48
Оценка:
Здравствуйте, фонарь, Вы писали:

Ф>вот захотелось мне передать эти настройки в PropertyGrid через Remoting.

Ф>и вываливается exception, дескать, AttributeCollection is not marked as serializable (это при реализации ICustomTypeDescriptor, т.к. без него вообще не захотело).

Ну наверное можно отнаследоваться от AttributeCollection и таки пометить ее как serializable. Но вобще то идея передавать я так понимаю по ссылке не очень хорошая. Лучше передавать сам конфиг по значению и все обертки делать уже на клиентской стороне.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re[3]: Конфигурирование .NET-приложений
От: фонарь Беларусь блог
Дата: 23.10.03 09:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну наверное можно отнаследоваться от AttributeCollection и таки пометить ее как serializable.

//да, я собственно так и делал 
[Serializable]
public class MyAttrCollection : AttributeCollection
{
 public MyAttrCollection() : base(null) {}
}

//а потом в реализации ICustomTypeDescriptor
AttributeCollection ICustomTypeDescriptor.GetAttributes() 
{
    return new MyAttrCollection();
}

оно все равно ругается, что not marked as serializable.

AVK>Но вобще то идея передавать я так понимаю по ссылке не очень хорошая. Лучше передавать сам конфиг по значению и все обертки делать уже на клиентской стороне.


согласен. это так, исследование
Re: Конфигурирование .NET-приложений
От: Yuri Россия http://spbdetails.ru
Дата: 20.01.04 13:39
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

Спасибо за отличную статью!

Вопрос: почему в свойстве IsReadOnly класса MyPropDesc возвращается false? По-моему правильнее было бы воазвращать _PropDesc.IsReadOnly.
Take it easy.
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.01.04 13:52
Оценка:
Здравствуйте, Yuri, Вы писали:

Y>Вопрос: почему в свойстве IsReadOnly класса MyPropDesc возвращается false? По-моему правильнее было бы воазвращать _PropDesc.IsReadOnly.


Ну для конкретного проекта это не критично, а так вобще конечно ты прав.
... << RSDN@Home 1.1.3 beta 1 >>
AVK Blog
Re: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 09.06.04 12:35
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

Извините, туплю, а хочется побыстрее (в тч оттупиться).
Не работает, что-то подстановка имен в классе конфигурации со вложенными классами для свойств вложенных классов.

public class config

protected mobjA As new AClass
protected mobjB As new BClass
protected mstrDescription as New String

' работает
Public Property Description As string
' работает
Public Readonly Property A As AClass
....

end class

Public Class AClass
protected mstrName as new string

' не работает
Public Property Name As String
...
end class
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.06.04 12:54
Оценка:
Здравствуйте, olegbs, Вы писали:

O>Извините, туплю, а хочется побыстрее (в тч оттупиться).

O>Не работает, что-то подстановка имен в классе конфигурации со вложенными классами для свойств вложенных классов.

Что значит вложенных?
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[3]: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 09.06.04 13:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, olegbs, Вы писали:


O>>Извините, туплю, а хочется побыстрее (в тч оттупиться).

O>>Не работает, что-то подстановка имен в классе конфигурации со вложенными классами для свойств вложенных классов.

AVK>Что значит вложенных?

Я попробовал в сообщении это раскрыть, но видно, действительно, туплю :<
А имел я ввиду, что класс Config имеет в своем составе члена, который сам является классом и у него имеются свойства (вот для этих свойств хотелось бы увидеть русские названия)
Примерный текст класса ниже. Могу на С#, но только завтра набью, чтобы не было синтаксических ошибок.


public class Config

protected mobjA As new AClass
protected mstrDescription as New String

' работает
Public Property Description() As String
        Get
            Return mstrDescription
        End Get
        Set(ByVal Value As String)
            mstrDescription = Value
        End Set
End Property

' работает
Public Readonly Property A As AClass
        Get
            Return mobjA
        End Get
End Property

end class

Public Class AClass
protected mstrName as new string

' не работает
Public Property Name As String
        Get
            Return mstrName
        End Get
        Set(ByVal Value As String)
            mstrName = Value
        End Set
End Property
...
end class
Re[4]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.06.04 13:49
Оценка:
Здравствуйте, olegbs, Вы писали:

O>А имел я ввиду, что класс Config имеет в своем составе члена, который сам является классом и у него имеются свойства (вот для этих свойств хотелось бы увидеть русские названия)


А как ты их в гриде сможешь увидеть, он тебе для класса просто его имя выведет?
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[5]: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 10.06.04 07:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, olegbs, Вы писали:


O>>А имел я ввиду, что класс Config имеет в своем составе члена, который сам является классом и у него имеются свойства (вот для этих свойств хотелось бы увидеть русские названия)


AVK>А как ты их в гриде сможешь увидеть, он тебе для класса просто его имя выведет?


<TypeConverter(GetType(MyStatusConverter))> _
Public Class AClass
...
End Class
Re[6]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.06.04 07:46
Оценка:
Здравствуйте, olegbs, Вы писали:

AVK>>А как ты их в гриде сможешь увидеть, он тебе для класса просто его имя выведет?


O><TypeConverter(GetType(MyStatusConverter))> _

O>Public Class AClass
O>...
O>End Class

Не, ну что из тебя все клещами вытягивать приходится? В конвертере видимо реализован GetProperties? Тогда все понятно. Та версия что в журнале очень старая уже, в дальнейшем этот класс был сильно переработан. Свежая версия отрабатывает DisplayName и в таких случаях, и в enum и еще много чего интересного умеет. Брать как обычно, в CVS януса. Можно еще попробовать дернуть через subversion, адрес репозитория svn://rsdn.ru/Janus.
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[7]: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 10.06.04 08:02
Оценка:
Спасибо, Андрей !
Моя тупость окончилась. А клещами тащить не надо, не хотел загружать форум тривиальными вещами ))
Задача разовая, поэтому не стал оборачивать класс, а сделал наследование от обертки, как для класса конфигурации, так и для вложенных. Часа два делал, потому что сам дурак, делал изменения, а в propertygrid показывал инстанцию первоначального класса.
Бывает
Удачи
Re: Конфигурирование .NET-приложений
От: Tom Россия http://www.RSDN.ru
Дата: 20.09.04 16:56
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Статья :



АК>Авторы :

АК>Андрей Корявченко

АК>Аннотация :

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....

Хочется добавить:
1. Использовать при XML серилизации таки нужно XmlTextReader/XmlTextWriter иначе буду проблеммы с национальными символами.
2. Можно упомянуть как десериализуется тип, если он не найден (массив елементов XmlAttribute и XmlElement)
3. Можно упомянуть о XmlDeserializationEvents (так как это вообще в MSDN не описано)
Народная мудрось
всем все никому ничего(с).
Re[2]: Конфигурирование .NET-приложений
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.09.04 23:31
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>... Можно упомянуть...


Да ты упомянай, не стесняйся.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Конфигурирование .NET-приложений
От: Tom Россия http://www.RSDN.ru
Дата: 21.09.04 11:48
Оценка:
VD>Да ты упомянай, не стесняйся.
Это как? Я же не могу статью АВК править...
Народная мудрось
всем все никому ничего(с).
Re[4]: Конфигурирование .NET-приложений
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.04 18:21
Оценка: +1
Здравствуйте, Tom, Вы писали:

VD>>Да ты упомянай, не стесняйся.

Tom>Это как? Я же не могу статью АВК править...

Так ты тут и описывай. Не сомневайся, те кого заинтересовала эта статья с удовольствием прочтут и ее обсуждение.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Конфигурирование .NET-приложений
От: Аноним  
Дата: 15.06.05 14:26
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Статья :

АК>Конфигурирование .NET-приложений
Автор(ы): Андрей Корявченко
Дата: 12.05.2003
Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru.


АК>Авторы :

АК>Андрей Корявченко

АК>Аннотация :

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....

Спасибо за статью, все работет превосходно. Один вопрос. Я храню в свойстве путь к некоторой папке. Хотелось бы это значение в PropertyGrid ну руками, а с помощью FolderBrowserDialog писать. Как это можно устроить? Благодарю.
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.06.05 14:51
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Спасибо за статью, все работет превосходно. Один вопрос. Я храню в свойстве путь к некоторой папке. Хотелось бы это значение в PropertyGrid ну руками, а с помощью FolderBrowserDialog писать. Как это можно устроить? Благодарю.


Если скачать исходники януса (http://rsdn.ru/projects/VcsStatus.aspx?project=janus), то там можно увидеть пример (свойство, которое содержит путь к звуковому файлу). Если лень разбираться, то смотреть классы EditorAttribute и UITypeEditor.

P.S. Скачать свежие исходники януса в любом случае стоит, поскольку PropertyGridCustomizer был существенно переделан с тех пор.
... << RSDN@Home 1.2.0 alpha rev. 475>>
AVK Blog
Re[2]: Конфигурирование .NET-приложений
От: Andre Украина  
Дата: 15.06.05 14:51
Оценка:
А>Спасибо за статью, все работет превосходно. Один вопрос. Я храню в свойстве путь к некоторой папке. Хотелось бы это значение в PropertyGrid ну руками, а с помощью FolderBrowserDialog писать. Как это можно устроить? Благодарю.

        [Editor(typeof (FolderEditor), typeof (UITypeEditor))]
        public string SomeFolder
        {
            get { return _someFolder; }
            set    { _someFolder = value; }
        }

        private class FolderEditor : FolderNameEditor
        {
            protected override void InitializeDialog(FolderBrowser fbd)
            {
            }
        }
... << RSDN@Home 1.1.4 beta 7 rev. 457>>
Я бы изменил мир — но Бог не даёт исходников...
Re[3]: Конфигурирование .NET-приложений
От: Аноним  
Дата: 15.06.05 15:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, <Аноним>, Вы писали:


А>>Спасибо за статью, все работет превосходно. Один вопрос. Я храню в свойстве путь к некоторой папке. Хотелось бы это значение в PropertyGrid ну руками, а с помощью FolderBrowserDialog писать. Как это можно устроить? Благодарю.


AVK>Если скачать исходники януса (http://rsdn.ru/projects/VcsStatus.aspx?project=janus), то там можно увидеть пример (свойство, которое содержит путь к звуковому файлу). Если лень разбираться, то смотреть классы EditorAttribute и UITypeEditor.


AVK>P.S. Скачать свежие исходники януса в любом случае стоит, поскольку PropertyGridCustomizer был существенно переделан с тех пор.





Огромное спасибо, буду разбираться дальше.
Re[3]: Конфигурирование .NET-приложений
От: Аноним  
Дата: 15.06.05 17:59
Оценка:
Здравствуйте, Andre, Вы писали:

A>
A>        [Editor(typeof (FolderEditor), typeof (UITypeEditor))]
A>        public string SomeFolder
A>        {
A>            get { return _someFolder; }
A>            set    { _someFolder = value; }
A>        }

A>        private class FolderEditor : FolderNameEditor
A>        {
A>            protected override void InitializeDialog(FolderBrowser fbd)
A>            {
A>            }
A>        }
A>



не могу понять. добавил:

using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;

пишет:

The type or namespace name 'FolderNameEditor' could not be found (are you missing a using directive or an assembly reference?)

почему он не видит 'FolderNameEditor'? ведь этот класс находится в System.Windows.Forms.Design
Re[4]: Конфигурирование .NET-приложений
От: Andre Украина  
Дата: 15.06.05 18:23
Оценка:
А>почему он не видит 'FolderNameEditor'? ведь этот класс находится в System.Windows.Forms.Design

Добавь в проекте референс на System.Design
... << RSDN@Home 1.1.4 beta 7 rev. 0>> :: silent
Я бы изменил мир — но Бог не даёт исходников...
Re[5]: Конфигурирование .NET-приложений
От: Аноним  
Дата: 15.06.05 19:02
Оценка:
Здравствуйте, Andre, Вы писали:

А>>почему он не видит 'FolderNameEditor'? ведь этот класс находится в System.Windows.Forms.Design


A>Добавь в проекте референс на System.Design




уже нашел, спасибо.
Re: Конфигурирование .NET-приложений
От: MatFiz Россия  
Дата: 05.02.06 13:30
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Статья :

АК>Конфигурирование .NET-приложений
Автор(ы): Андрей Корявченко
Дата: 12.05.2003
Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru.


АК>Авторы :

АК>Андрей Корявченко

АК>Аннотация :

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....


Нашли маленькую багу.
Всем, кто бездумно воспользовался кодом статьи, рекомендую почитать здесь
Автор: VVitaliy
Дата: 03.02.06
How are YOU doin'?
Re: Конфигурирование .NET-приложений
От: Ник  
Дата: 23.04.06 20:47
Оценка:
Здравствуйте, Андрей Корявченко.

Пожалуйста, ответьте на тупой вопрос. Я прочитал статью несколько раз, но из-за некоторых ошибок в ДНК не могу разобраться самостоятельно. Как вообще правильно использовать этот синглтон-класс? Нельзя ли было в текст статьи добавить еще один короткий листинг?

Вот я добавляю свои атрибуты в тело класса, выше тэга [XmlIgnore], таким образом:
public static string pathToTTLibrary;
Код для инициализации этой переменной-члена я добавил сюда:
catch (Exception e)
{
   //Если не удалось десериализовать то просто создаем новый экземпляр
   instance = new Config();
   pathToTTLibrary = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
}


Дальше я в определенном месте программы пытаюсь этот атрибут считать. Поскольку никаких конструкторов не указано, то у меня Config.pathToTTLibrary является null, независимо от того, вызываю я Config.Reload() перед этим, или нет. Что я должен был сделать, чтобы он не был null? Я не понимаю фразу "Для перезагрузки настроек достаточно обнулить поле instance. При следующем обращении настройки будут заново загружены с диска." Почему? Как именно нужно это "обращение" осуществить, чтобы чтение произошло?
Re[2]: Конфигурирование .NET-приложений
От: Варвар США  
Дата: 24.04.06 16:01
Оценка: 2 (1)
Здравствуйте, Ник, Вы писали:
Ник>Вот я добавляю свои атрибуты в тело класса, выше тэга [XmlIgnore], таким образом:
Ник>public static string pathToTTLibrary;
Поля твоей конфигурации не должны быть статическими.
В коде можно использовать так:
string path = Config.Instance.pathToTTLibrary;


Ник>Дальше я в определенном месте программы пытаюсь этот атрибут считать. Поскольку никаких конструкторов не указано, то у меня Config.pathToTTLibrary является null, независимо от того, вызываю я Config.Reload() перед этим, или нет. Что я должен был сделать, чтобы он не был null? Я не понимаю фразу "Для перезагрузки настроек достаточно обнулить поле instance. При следующем обращении настройки будут заново загружены с диска." Почему? Как именно нужно это "обращение" осуществить, чтобы чтение произошло?

По моему ты не понял что такое Instance. Данный класс является синглтоном. Свойство Config.Instance при первом вызове создаёт и возвращает объект типа Config. В процессе создания он его десереализует из файла и сохраняет ссылку на него во внутреннем статическом поле instance. При последующих вызовах просто возвращает этот объект (design patern singlton). Таким образом если обнулить поле instance, то при следующем обращении к Config.Instance, объект будет заного создан (считан).

  public static Config Instance
  {
    get
    {
      lock(lockFlag) 
      {
        if(instance == null)
        {     
          try
          {
            //Пытаемся загрузить файл с диска и десериализовать его
            using(FileStream fs = 
                new FileStream(LocalUser.GetDatabasePath()
                + "\\config.xml",FileMode.Open))
            {
              System.Xml.Serialization.XmlSerializer xs = 
                  new System.Xml.Serialization.XmlSerializer(typeof(Config));
              instance = (Config)xs.Deserialize(fs);
            }
          }
          catch(Exception e)
          {
            //Если не удалось десериализовать то просто создаем новый экземпляр
            instance = new Config();
          }
        }
      }
      return instance;
    }



Надеюсь понятно...
И вместо сердца каменный топор...
Re: Конфигурирование .NET-приложений
От: Ed.ward Россия  
Дата: 25.04.06 11:55
Оценка:
Привет всем

У меня такой вопрос, был экземпляр класса сеарилизуемый в config.

В след. версии программы в этом классе добавилась и убралась пара полей.
Как пройдет десериализация?

Рухнет или новые поля просто инициируются значениями по умолчанию?

Ed.ward
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.04.06 12:17
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>У меня такой вопрос, был экземпляр класса сеарилизуемый в config.


EW>В след. версии программы в этом классе добавилась и убралась пара полей.

EW>Как пройдет десериализация?

EW>Рухнет или новые поля просто инициируются значениями по умолчанию?


Если просто удалились/добавились, то да. Проблемы будут только с удалением/переименованием элементов enum и в смене типа свойст.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[2]: Конфигурирование .NET-приложений
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.04.06 09:27
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Привет всем


EW>У меня такой вопрос, был экземпляр класса сеарилизуемый в config.


EW>В след. версии программы в этом классе добавилась и убралась пара полей.

EW>Как пройдет десериализация?

EW>Рухнет или новые поля просто инициируются значениями по умолчанию?

Отсутствующие поля останутся инициализированы значениями по умолчанию.

Неизвестные ноды вызовут ошибку. Чтобы ее не было, можно в новой версии класса добавить специального мембера:
[XmlAnyElenent]
[Obsolete("Never access this member directly", true)]
public XmlElement[] Deprecated
{
 get { return null;}
 set { }
}
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Конфигурирование .NET-приложений
От: Ник  
Дата: 01.05.06 09:45
Оценка:
Здравствуйте, Варвар, Вы писали:

В>Поля твоей конфигурации не должны быть статическими.

В>В коде можно использовать так:
В>
В>string path = Config.Instance.pathToTTLibrary;
В>

В>Надеюсь понятно...

Большое спасибо, теперь я понял.
Re: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 12.05.06 14:09
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

Спасибо.
Интересная статья.

Но у меня код не работает. Ругается на LocalUser.GetDatabasePath().
2003 студия. МСДН тоже такого метода не знает.

Ну ладно, я его в обеих местах поменял на

//new FileStream(LocalUser.GetDatabasePath()
  new FileStream("d:"
  + "\\config.xml",FileMode.Open))


Скомпилировался.

Но работать не работает.
Сохраняет фал со следующим содержимым

<?xml version="1.0"?>
<Config xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />

Как видите, моих переменных там нет.

Что я делаю не так.

Вот код.



public class Config
    {
        //[XmlTextAttribute]
        public string strTest22= "hello";

        public string MyStr ;
    
        //[XmlElement(Namespace="http://www.cohowinery.com")]
        public int t1=3;
        
        //[XmlElement(Namespace="http://www.cohowinery.com")]
        public int t2=4;
        private static object lockFlag = new object();
        private static Config instance;
        [XmlIgnore]
        public static Config Instance
        {
            get
            {
                lock(lockFlag) 
                {
                    if(instance == null)
                    {     
                        try
                        {
                            //Пытаемся загрузить файл с диска и десериализовать его
                            using(FileStream fs = 
                                      //new FileStream(LocalUser.GetDatabasePath()
                                      new FileStream("d:"
                                      + "\\config.xml",FileMode.Open))
                            {
                                System.Xml.Serialization.XmlSerializer xs = 
                                    new System.Xml.Serialization.XmlSerializer(typeof(Config));
                                instance = (Config)xs.Deserialize(fs);
                            }
                        }
                        catch(Exception e)
                        {
                            //Если не удалось десериализовать то просто создаем новый экземпляр
                            instance = new Config();
                        }
                    }
                }
                return instance;
            }
        }

        public static void Reload()
        {
            instance = null;
        }


        public void Save()
        {
            using(FileStream fs = 
                      new FileStream("d:"
                      //new FileStream(LocalUser.GetDatabasePath()
                          +"\\config.xml",FileMode.Create))
            {
                System.Xml.Serialization.XmlSerializer xs = 
                    new System.Xml.Serialization.XmlSerializer(typeof(Config));
                xs.Serialize(fs,instance);
            }
        }

    //[XmlTextAttribute]
    public string strTest= "hello";

    }
Re: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 12.05.06 14:10
Оценка:
А у кого-то есть работающий код єтого класса, без графической части?

Киньте в меня, если не жалко.
Re[2]: Конфигурирование .NET-приложений
От: BlezAlex  
Дата: 12.05.06 14:14
Оценка:
сохраняются только public свойства, добавь по свойству на каждую
переменную, кот. нужно сохранить, и будет работать
Posted via RSDN NNTP Server 2.0
Re[3]: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 12.05.06 14:28
Оценка:
Здравствуйте, BlezAlex, Вы писали :

BA>сохраняются только public свойства, добавь по свойству на каждую

BA>переменную, кот. нужно сохранить, и будет работать

Добавил.
Результат тот же самій. То же содержимое файла.


public class Config
    {
        //[XmlTextAttribute]

        public string spTest
        {
            get{return strTest22;}
            set{strTest22=value;}
        }


        private string strTest22= "hello";
Re[4]: Конфигурирование .NET-приложений
От: BlezAlex  
Дата: 12.05.06 14:42
Оценка:
Любопытно
Скопировал твой первый исходник, все ОК, сохранилось.
Вобще я ошибся, это в propertyGrid отображаются только public свойства,
а сохранятся должны все..
Posted via RSDN NNTP Server 2.0
Re[5]: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 12.05.06 15:05
Оценка:
"BlezAlex" <54356@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1894893@news.rsdn.ru...
> Любопытно
> Скопировал твой первый исходник, все ОК, сохранилось.
> Вобще я ошибся, это в propertyGrid отображаются только public свойства,
> а сохранятся должны все..

Да уж.
Действительно любопытно.
Что ли и себе скопировать?
Posted via RSDN NNTP Server 2.0
Re[5]: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 12.05.06 15:08
Оценка:
А как ты его вызываешь?
я вот так

Config cfg = new Config();

cfg.spTest="sasa";


cfg.Save();


"BlezAlex" <54356@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1894893@news.rsdn.ru...
> Любопытно
> Скопировал твой первый исходник, все ОК, сохранилось.
> Вобще я ошибся, это в propertyGrid отображаются только public свойства,
> а сохранятся должны все..
Posted via RSDN NNTP Server 2.0
Re[6]: Конфигурирование .NET-приложений
От: BlezAlex  
Дата: 12.05.06 15:34
Оценка:
а я так:
Config.Instance.Save();


p.s. VS 2005
Posted via RSDN NNTP Server 2.0
Re[7]: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 12.05.06 16:13
Оценка:
"BlezAlex" <54356@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1894975@news.rsdn.ru...
>а я так:
> Config.Instance.Save();

Спасибо!
Заработало .
Буду завтра разбираться в чем біл поинт.
>
>
> p.s. VS 2005
Posted via RSDN NNTP Server 2.0
Re[3]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.05.06 18:58
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Неизвестные ноды вызовут ошибку.


Пробовал?
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[8]: Конфигурирование .NET-приложений
От: Варвар США  
Дата: 14.05.06 10:42
Оценка:
Здравствуйте, alexdp, Вы писали:


A>"BlezAlex" <54356@users.rsdn.ru> сообщил/сообщила в новостях следующее:

A>news:1894975@news.rsdn.ru...
>>а я так:
>> Config.Instance.Save();

A>Спасибо!

A>Заработало .
A>Буду завтра разбираться в чем біл поинт.
>>
>>
>> p.s. VS 2005
Поинт в том, что у Config нет public constructor который бы инициализировал instance. При вызове config.Save(), instance равен null и строчка xs.Serialize(fs,instance) сериализует ничто...
Вообще, я бы запретил использование new добавив пустой private constructor и тогда Config config = new Config() выдавало бы ошибку компиляции заставляя пользоваться Config config = Config.Instance.
И вместо сердца каменный топор...
Re[4]: Конфигурирование .NET-приложений
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.05.06 03:48
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Пробовал?

Да вроде бы да. Я правда давно в последний раз занимался десериализацией на атрибутах.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 17.05.06 14:07
Оценка:
" Варвар " <19277@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1896129@news.rsdn.ru...
> Здравствуйте, alexdp, Вы писали:
>
>
> A>"BlezAlex" <54356@users.rsdn.ru> сообщил/сообщила в новостях следующее:
> A>news:1894975@news.rsdn.ru...

> Поинт в том, что у Config нет public constructor который бы

> инициализировал instance. При вызове config.Save(), instance равен null и
> строчка xs.Serialize(fs,instance) сериализует ничто...
> Вообще, я бы запретил использование new добавив пустой private constructor
> и тогда Config config = new Config() выдавало бы ошибку > > > компиляции
> заставляя пользоваться Config config = Config.Instance.

Понятно. Спасибо.

Но все таки, где брать LocalUser.GetDatabasePath()
Posted via RSDN NNTP Server 2.0
Re[10]: Конфигурирование .NET-приложений
От: Варвар США  
Дата: 17.05.06 14:54
Оценка:
Здравствуйте, alexdp, Вы писали:

A>Но все таки, где брать LocalUser.GetDatabasePath()


Пример в статье выдернут из реального проекта в котором был класс LocalUser. Он тебе не нужен. Тебе нужен путь к директории в которой лежит конфигурационный файл. Обычно это таже директория в которой лежит exe. Можно воспользоваться Environment.CurrentDirectory.
И вместо сердца каменный топор...
Re[11]: Конфигурирование .NET-приложений
От: alexdp Украина  
Дата: 17.05.06 15:14
Оценка:
" Варвар " <19277@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1902335@news.rsdn.ru...
> Здравствуйте, alexdp, Вы писали:
>
> A>Но все таки, где брать LocalUser.GetDatabasePath()
>
> Пример в статье выдернут из реального проекта в котором был класс
> LocalUser. Он тебе не нужен. Тебе нужен путь к директории в которой лежит
> конфигурационный файл. Обычно это таже директория в которой лежит exe.
> Можно воспользоваться Environment.CurrentDirectory.

Спасибо за объяснение.
CurrentDirectory вполне подойдет.
Posted via RSDN NNTP Server 2.0
Re[11]: Конфигурирование .NET-приложений
От: stele Россия www.stele.su
Дата: 17.05.06 15:22
Оценка:
Здравствуйте, Варвар, Вы писали:

В>Пример в статье выдернут из реального проекта в котором был класс LocalUser. Он тебе не нужен. Тебе нужен путь к директории в которой лежит конфигурационный файл. Обычно это таже директория в которой лежит exe. Можно воспользоваться Environment.CurrentDirectory.


Не надо учить плохому, лучше в Application Data создать папку от программы и там хранить конфиги. Но не рядом с исполняемым файлом — у пользователя может не хватить прав на запись. Если это конечно не приложение для себя.
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 648>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Re[12]: Конфигурирование .NET-приложений
От: Варвар США  
Дата: 17.05.06 16:31
Оценка:
Здравствуйте, stele, Вы писали:

S>Здравствуйте, Варвар, Вы писали:


В>>Пример в статье выдернут из реального проекта в котором был класс LocalUser. Он тебе не нужен. Тебе нужен путь к директории в которой лежит конфигурационный файл. Обычно это таже директория в которой лежит exe. Можно воспользоваться Environment.CurrentDirectory.


S>Не надо учить плохому, лучше в Application Data создать папку от программы и там хранить конфиги. Но не рядом с исполняемым файлом — у пользователя может не хватить прав на запись. Если это конечно не приложение для себя.

Для учебных целей сойдёт, а для реального приложения пути к конфигурационным файлам и типы соотвествуюших им классов прописываются в специальном секшене в app.config, для которого пишется специальный ConfigurationSectionHandler, которым пользуется специальный ConfigManager, управляющий всеми конфигами в апликации, в котором и имплементируется (один раз) превращение конфиг файла в объект соответствующего класса (и наоборот). Но это в реальном приложении, а для учебных целей сойдёт и то что описано в статье
Кстати... Как получть путь к Application Data?
И вместо сердца каменный топор...
Re[13]: Конфигурирование .NET-приложений
От: stele Россия www.stele.su
Дата: 17.05.06 17:36
Оценка:
Здравствуйте, Варвар, Вы писали:

В> Но это в реальном приложении, а для учебных целей сойдёт и то что описано в статье

В статье всё нормально. Я о другом. Я о том, что тебе предложили и ты согласился хранить файл с настройками рядом со своей программой. Лучше сразу тренироваться как в бою и не привыкать к порочной практике — тебе проще файл настроек рядом уронить, а проблему от этого получит сапорт и пользователь.

В>Кстати... Как получть путь к Application Data?


смотри System.Environment.GetFolderPath
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 648>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Re[14]: Конфигурирование .NET-приложений
От: Варвар США  
Дата: 17.05.06 18:03
Оценка:
Здравствуйте, stele, Вы писали:

В>> Я о том, что тебе предложили и ты согласился хранить файл с настройками рядом со своей программой.

Предложили не мне, а я. Как самый простой способ для тестовой програмки. Согласен, что не самый верный. Хотя бы потому что CurrentDirectory во время выполнения может и поменяться...

В>>Кстати... Как получть путь к Application Data?

S>смотри System.Environment.GetFolderPath
Спасибо. Буду знать
И вместо сердца каменный топор...
Re[15]: Конфигурирование .NET-приложений
От: stele Россия www.stele.su
Дата: 17.05.06 18:13
Оценка:
Здравствуйте, Варвар, Вы писали:

В>Предложили не мне, а я.


Хм, и в правду ты предложил, обознался.

В>Как самый простой способ для тестовой програмки. Согласен, что не самый верный. Хотя бы потому что CurrentDirectory во время выполнения может и поменяться...


Точно.
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 648>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Re: Конфигурирование .NET-приложений
От: sleepwalker Россия  
Дата: 07.05.07 07:05
Оценка:
Статья замечательная. А можно поподробней на счет вот этой штуки

private static XmlSerializer CreateSerializer()
{
  ArrayList res = new ArrayList();
  foreach(DictionaryEntry de in PluginManager.Instance.ConfigurablePlugins)
    res.Add(((IConfigurablePlugin)de.Value).Config.GetType());
  return new XmlSerializer(typeof(Config), (Type[])res.ToArray(typeof(Type)));
}


Хочется сделать универсальный Config-класс для различных приложений и Config, естественно, будет меняться от одного к другому. Как тут быть? Понятно что как-то конфигу надо говорить какие типы он будет сериализовывать. А вот дальше ...
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.05.07 08:51
Оценка:
Здравствуйте, sleepwalker, Вы писали:

S>Хочется сделать универсальный Config-класс для различных приложений и Config, естественно, будет меняться от одного к другому. Как тут быть?


Простого ответа на этот вопрос у меня нет. А сложный на статью тянет, если не больше.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[3]: Конфигурирование .NET-приложений
От: sleepwalker Россия  
Дата: 07.05.07 09:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, sleepwalker, Вы писали:


S>>Хочется сделать универсальный Config-класс для различных приложений и Config, естественно, будет меняться от одного к другому. Как тут быть?


AVK>Простого ответа на этот вопрос у меня нет. А сложный на статью тянет, если не больше.


А хотябы ссылочки каки-нить кинуть? )) Можна и на буржуйском. Наверняка есть что-то.


ЗЫ
У меня пока одна мысль сделать генерик Config<T>(), где то самое T и будет конкертика для конкретного приложения.
Re[4]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.05.07 09:43
Оценка:
Здравствуйте, sleepwalker, Вы писали:

S>А хотябы ссылочки каки-нить кинуть? )) Можна и на буржуйском. Наверняка есть что-то.


Ссылочков нету. Есть частично готовый код, но без документации, и частично портированный на C# 3. Если интересно, могу выслать на мыло.


S>ЗЫ

S>У меня пока одна мысль сделать генерик Config<T>(), где то самое T и будет конкертика для конкретного приложения.

Это ничего особого не даст. Экономить на паре строчек подъема XmlSerializer не вижу смысла.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[5]: Конфигурирование .NET-приложений
От: sleepwalker Россия  
Дата: 07.05.07 10:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, sleepwalker, Вы писали:


S>>А хотябы ссылочки каки-нить кинуть? )) Можна и на буржуйском. Наверняка есть что-то.


AVK>Ссылочков нету. Есть частично готовый код, но без документации, и частично портированный на C# 3. Если интересно, могу выслать на мыло.


Очень интересно.
Если не жалко, sleepwalker@ngs.ru, буду признателен и всякое такое. :)


S>>ЗЫ

S>>У меня пока одна мысль сделать генерик Config<T>(), где то самое T и будет конкертика для конкретного приложения.

AVK>Это ничего особого не даст. Экономить на паре строчек подъема XmlSerializer не вижу смысла.


Ну пара не пара. Со всякими фенечками и обработками там вылазит около сотни этих самых строчек. Хотя, конечно, хочется, чтобы было все красиво )
Re[6]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.05.07 10:24
Оценка:
Здравствуйте, sleepwalker, Вы писали:

S>Очень интересно.

S>Если не жалко, sleepwalker@ngs.ru, буду признателен и всякое такое.

Не жалко. Этот кусок я и не планировал делать закрытым.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[7]: Конфигурирование .NET-приложений
От: sleepwalker Россия  
Дата: 07.05.07 11:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:


AVK>Не жалко. Этот кусок я и не планировал делать закрытым.


Спасибо. Будем посмотреть.

На почту ответить не вышло, говорит prohibited.
Re[5]: Конфигурирование .NET-приложений
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 07.05.07 18:33
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Есть частично готовый код, но без документации, и частично портированный на C# 3. Если интересно, могу выслать на мыло.

Интересно. Заранее благодарен.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re[6]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.05.07 08:15
Оценка:
Здравствуйте, rsn81, Вы писали:

R>Интересно. Заранее благодарен.


R.SAT rev. 128
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re: Конфигурирование .NET-приложений
От: xa0c Россия http://irchat.ru
Дата: 28.08.07 21:07
Оценка:
Что-то немного не догоняю: а зачем класс PropDispNameWrapper и вообще весь этот длиннющий исходник в разделе "Изменение названий свойств в PropertyGrid"?..
Чем не устраивает стандартный атрибут "DisplayName" из System.ComponentModel?..

Разве что фрейморк второй требует... о_О
Re[2]: Конфигурирование .NET-приложений
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 29.08.07 03:04
Оценка:
Здравствуйте, xa0c, Вы писали:

X>Что-то немного не догоняю


на дату статьи посмотри
... << RSDN@Home 1.2.0 alpha rev. 728>>
Re[3]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.08.07 08:33
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

X>>Что-то немного не догоняю


OE>на дату статьи посмотри


Кроме того, DisplayName в статье русифицирует еще и значения перечисления.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re[4]: Конфигурирование .NET-приложений
От: CityACC  
Дата: 31.10.07 12:45
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Изучил вашу статью — оч. полезная оказалась, как раз стоит такая задача у меня.
Нужно в xml файле хранить информацию о контроллах, которые будут динамически загружаться на форму при запуске программы.
Т.е. храним тип контролла, расположение, размеры и проч. Я сделал этот файл с помощью DataTable(в которой 1строка — 1 контролл, ячейки — свойства контролла) и XmlSerializer.
А как можно было бы для решения использовать Ваш класс Config.
Re: Конфигурирование .NET-приложений
От: cane  
Дата: 15.07.09 12:05
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....


в статье приведен пример генерируемого XML файла конфигурации
<PluginConfigs>
  <PluginConfig>
   <PluginClass>RSDN.Janus.StdPlugs.WinampPlugin</PluginClass>
    <PluginConfiguration xsi:type="WinampPluginConfiguration">
      <PlayerVersion>Winamp3x</PlayerVersion>
      <SilentName>silent</SilentName>
    </PluginConfiguration>
  </PluginConfig>
  <PluginConfig>

объясните пожалуйста, каким образом атрибуты

[Category("Application")]
[DefaultValue("Title1")]
[Description("Enter Title for the application")]


свойств

public string Title
{
get { return _Title; }
set { _Title = (string) value; }
}

класса конфигурации участвуют в сиреализации?

по статье я создал примерчик (без использования синглтона) Сериализация класса для PropertyGrid. По результатам выполнения которого следует, что атрибуты при сериализации не используются. Как тогда у вас образовалась иерархия в xml конфиге?
сериализация propertygrid config
Re[2]: Конфигурирование .NET-приложений
От: Ellin Россия www.rsdn.ru
Дата: 15.07.09 12:20
Оценка:
Здравствуйте, cane, Вы писали:

Насколько я помню эти атрибуты участвуют в отображении данного конфига в редакторе (в формочке) PropertyGrid. Эти атрибуты указывают как xml будет биндится к PropertyGrid (какое будет дефолтное значение, как будет выглядеть и т.п.)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.