2010-07-29 4 views
2

Lors de la modification d'un fichier de paramètres .NET, plusieurs types sont proposés pour un paramètre. Cependant, tous les types accessibles par mon projet n'apparaissent pas, même dans la fenêtre 'Parcourir'.Paramètres .NET Types de fichiers disponibles

Qu'est-ce qui détermine si un type peut être utilisé pour un paramètre de fichier de paramètres?

J'ai un type que j'ai créé que j'aimerais sauvegarder, et je veux savoir ce que j'ai besoin de changer pour l'utiliser dans un fichier de paramètres.

(VS 2008 - .Net 3.5)

+0

Tout ce qui peut être sérialisé XML est utilisable (ie tout ce qui a un constructeur par défaut) . Même ceux qui n'apparaissent pas dans la barre de navigation, vous pouvez taper le nom du type complet dans la zone de texte pour ajouter un paramètre de ce type. –

Répondre

0

Ce que vous devez faire est de "pirater" autour des .settings et .Designer.cs dépose un peu, comme documenté here.

Si vous créez un type personnalisé dans votre projet, par exemple:

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

Pour qu'il apparaisse comme une option dans l'éditeur Paramètres, vous devez ajouter la première valeur de paramètre qui utilise ce type aux fichiers, comme suit:

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! Certains types «faits maison» apparaissent dans le concepteur régulier - sans faire ce piratage. Juste pas celui que je veux. Pourquoi ceux-ci apparaissent sans piratage? – Mashmagar

+0

Je * pense * qu'il ne reprend pas les types qui sont dans le même assemblage/projet. C'est-à-dire que tous les types * d'autres assemblages que vous référencez seront disponibles – Rob

+0

p.s. Le 'Blech!' n'était pas ciblé sur vous, mais est juste mon malaise avec dégringolade dans le code du concepteur. – Mashmagar

0

Quels types apparaissent dans la fenêtre 'Parcourir' - Je crois que la réponse est des types sérialisables. Voici un exemple qui a fonctionné pour moi (VS 2012, .Net 4.0).

classe avec les membres sérialisables publics:

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

Quoi écrire dans la mise en valeur dans le concepteur:

<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

Dépend de ce que vous considérez "sérialisable". Dans votre exemple, vous n'avez pas le 'SerializableAttribute' dans la classe' Person', mais il est toujours utilisable dans les paramètres. par exemple. malgré que 'typeof (Person) .IsSerializable' soit' false', il peut toujours être utilisé dans les paramètres. –

Questions connexes