在修改 .NET 设置文件时,我可以选择设置的类型。但是,即使在“浏览”窗口中,也不会出现我的项目可访问的所有类型。
什么决定了一个类型是否可以用于设置文件设置?
我创建了一个我希望能够保存的类型,并且我想知道我需要对其进行哪些更改才能在设置文件中使用它。
(VS 2008 - .Net 3.5)
在修改 .NET 设置文件时,我可以选择设置的类型。但是,即使在“浏览”窗口中,也不会出现我的项目可访问的所有类型。
什么决定了一个类型是否可以用于设置文件设置?
我创建了一个我希望能够保存的类型,并且我想知道我需要对其进行哪些更改才能在设置文件中使用它。
(VS 2008 - .Net 3.5)
“浏览”窗口中出现什么类型 - 我相信答案是可序列化类型。下面是一个对我有用的例子(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>
您需要做的是稍微“破解” .settings 和 .Designer.cs 文件,如此处所述。
如果您在项目中创建自定义类型,例如:
namespace MyApp
{
public struct MyType
{
public string StringValue;
}
}
要让它在设置编辑器中显示为一个选项,您需要将使用该类型的第一个设置值添加到文件中,如下所示:
SettingsFile.settings:
<Setting Name="SettingNameGoesHere" Type="MyApp.MyType" Scope="User">
<Value Profile="(Default)" />
</Setting>
设置文件.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;
}
}