Дано: приложение WinForms, .NET 2.0, C# 2008, Settings созданные визардом.
Необходимо: в сеттингах хранить экземпляры System.Net.WebProxy
По умолчанию визард генерит следующее:
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
//... вот здесь наше злодейское свойство:
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Net.WebProxy WebProxyInstance {
get {
return ((global::System.Net.WebProxy)(this["WebProxyInstance"]));
}
set {
this["WebProxyInstance"] = value;
}
}
— в этом случае настройки не сохраняются — и при повторном запуске приложения в переменной WebProxyInstance находится null.
Проблему можно частично решить добавив
вручную атрибут SettingsSerializeAs к свойству:
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)]
public global::System.Net.WebProxy WebProxyInstance {
get {
return ((global::System.Net.WebProxy)(this["WebProxyInstance"]));
}
set {
this["WebProxyInstance"] = value;
}
}
Но тогда возникают две проблемы:
1. WebProxy при сериализации не сохраняет свойство Credentials (тип ICredentials)
2. При изменении сеттингов через визард мастер удаляет изменения внесенные вручную.
Как бороться, куда копать, что читать?
Заранее спасибо и виртуальный литр свежего и холодного пива ответившим