Actuellement, nous utilisons un objet de configuration géant qui est sérialisé vers/depuis le XML. Cela a bien fonctionné la plupart du temps, mais nous constatons qu'en cas de perte de puissance et de plantage de l'application, le fichier peut être laissé dans un état qui le rend incapable de se désérialiser correctement, corrompant ainsi les informations de configuration.
J'aimerais utiliser l'app.config intégré, mais il ne semble pas prendre facilement en charge les classes personnalisées. Par exemple, avec la sérialisation XML, je peux facilement sérialiser une classe générique list<ComplexClass>
sans code supplémentaire. Cela fonctionne tout simplement. Il semble que lorsque vous utilisez app.config, vous devez fournir une tonne d'informations et de classes personnalisées pour que cela fonctionne. De plus, la plupart des tutoriels de "configuration personnalisée" datent de 2007 et peuvent être dépassés pour autant que je sache. Quelqu'un a-t-il des informations sur la dernière façon de procéder dans .NET 4.0 ?
De plus, lorsqu'un problème survient dans l'application, 9/10 fois c'est à cause d'une mauvaise configuration. App.config aime stocker les paramètres modifiables par l'utilisateur dans un endroit très inaccessible pour les utilisateurs qui ne sont pas familiers avec les répertoires cachés et autres. Existe-t-il un moyen d'avoir un emplacement unique pour stocker le fichier de configuration, que l'utilisateur peut facilement nous envoyer par e-mail lorsqu'un problème survient ?
Ou bien, tout cela est-il plus facile que ce dont je me souviens au début de la version 2.0 ? Si vous avez des liens ou des exemples rapides sur la façon de créer facilement des informations personnalisées dans app.config, ce serait formidable.
Voici un autre exemple, une version simplifiée de l'un des types d'objets que je veux sérialiser en tant que List<Alarm>
comme la quantité de Alarm
peuvent varier ou être vides. Existe-t-il un moyen analogue de stocker quelque chose comme cela dans app.config ?
[Serializable]
public class Alarm
{
[Serializable]
public class AlarmSetting
{
public enum AlarmVariables { Concentration, RSquared }
public enum AlarmComparisons { LessThan, GreaterThan }
[Description("Which entity is being alarmed on.")]
public AlarmVariables Variable { get; set; }
[Description("Method of comparing the entity to the setpoint.")]
public AlarmComparisons Comparator { get; set; }
[Description("Value at which to alarm.")]
public Double Setpoint { get; set; }
}
public String Name { get; set; }
public Boolean Enabled { get; set; }
public String Parameter { get; set; }
public List<AlarmSetting> AlarmSettings { get; set; }
public System.Drawing.Color RowColor { get; set; }
}