2010-07-29 5 views
2

При изменении файла настроек .NET мне предоставляется выбор типов для настройки. Однако не все типы, доступные в моем проекте, появляются даже в окне «Обзор».Параметры файла .NET. Доступные типы файлов

Что определяет, может ли тип использоваться для настройки файла настроек?

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

(VS 2008 - .Net 3.5)

+0

Все, что может быть XML-сериализованным может использоваться (то есть все, что имеет конструктор по умолчанию) , Даже те, которые не отображаются в Обзор, вы можете ввести полное имя типа в текстовое поле, чтобы добавить настройку этого типа. –

ответ

0

Что вам нужно сделать, это "взломать" вокруг с .settings и .Designer.cs файлов немного, как описано here.

При создании пользовательского типа в проекте, такие как:

namespace MyApp 
{ 
    public struct MyType 
    { 
     public string StringValue; 
    } 
} 

Чтобы получить его, чтобы показать в качестве опции в редакторе настроек, вам нужно добавить первое значение параметра, которое использует этот тип к файлам, следующим образом:

SettingsFile.settings:

<Setting Name="SettingNameGoesHere" Type="MyApp.MyType" Scope="User"> 
    <Value Profile="(Default)" /> 
</Setting> 

SettingsFile.Designer.cs

[global::System.Configuration.UserScopedSettingAttribute()] 
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
public global::MyApp.MyType SettingNameGoesHere { 
    get { 
     return ((global::MyApp.MyType)(this["SettingNameGoesHere"])); 
    } 
    set { 
     this["SettingNameGoesHere"] = value; 
    } 
} 
+0

Blech! Некоторые «домашние» типы появляются в обычном дизайнере - без этого взлома. Просто не тот, который я хочу. Почему они появляются без взлома? – Mashmagar

+0

Я * думаю *, что он не подбирает типы, которые находятся в одной сборке/проекте. т. е. будут доступны любые типы, которые находятся в * других * сборках, которые вы укажете, – Rob

+0

стр. «Блех!» не был нацелен на вас, но это всего лишь мой дискомфорт, когда вы клоните в дизайнерский код. – Mashmagar

0

Какие типы отображаются в окне «Обзор» - я считаю, что ответ является сериализуемым. Ниже приведен пример, который работал для меня (VS 2012, .Net 4.0).

Класс с общественными сериализуемыми членами:

class Person { 
    public string Name; 
    public int Age; 
} 

Что писать в установочном значение в конструкторе:

<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Name>John</Name> 
    <Age>42</Age> 
</Person> 
+0

Зависит от того, что вы считаете «сериализуемым». В вашем примере у вас нет 'SerializableAttribute' в классе' Person', но он все еще может использоваться в настройках. например несмотря на 'typeof (Person) .IsSerializable' является' false', он все равно может использоваться в настройках. –

Смежные вопросы