2010-07-29 58 views
2

修改.NET設置文件時,我可以選擇設置的類型。但是,即使在「瀏覽」窗口中,也不是我的項目可以訪問的所有類型都可以顯示。.NET設置文件可用類型

什麼決定了一種類型是否可用於設置文件設置?

我有一個我創建的類型,我希望能夠保存,並且我想知道我需要更改它以便在設置文件中使用它。

(VS 2008 - 淨3.5)

+0

任何可以XML序列化是可用的(即有一個默認的構造函數的任何東西) 。即使那些沒有出現在瀏覽器中,也可以在文本框中輸入完整的類型名稱來添加該類型的設置。 – 2012-10-04 20:15:56

回答

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 2010-07-29 18:03:11

+0

我*認爲*它沒有選取相同組件/項目中的類型。即您參考的* other *程序集中的任何類型將可用 – Rob 2010-07-29 18:11:20

+0

ps.s. 'Blech!'沒有針對你,但只是我在設計師代碼中混淆不清。 – Mashmagar 2010-07-29 18:16:33

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

取決於你認爲的「可序列化」。你的例子中你沒有'Person'類的'SerializableAttribute',但它仍然可以在設置中使用。例如儘管'typeof(Person).IsSerializable'爲'false',它仍然可以在設置中使用。 – 2012-10-04 20:14:51