前段时间,我编写了自己的设置提供程序,因为我在类库中持久保存时遇到问题。 (注意 - 从应用程序中保留设置没有问题。)
今天,我刚刚对持久化类库设置进行了测试,并且没有我的自定义提供程序。 测试是:
(1)创建一个类库
(2)添加设置 - “名称”
(3)添加一个具有公共共享属性“Name”的类,该类读取和写入“Name”设置
(4)创建引用类库的应用程序,并使用共享属性读取和写入“名称”设置。
我确信在“名称”设置在应用程序打开时仍然存在但在关闭它并重新打开之后,该设置将恢复为默认设置。 这种情况现在还没有发生,我想确定我以前是个白痴而不是白痴。
我现在得到的行为是预期的行为吗?
ETA:我注意到我第一次创建测试应用,更改设置,关闭并重新打开时,设置不会保留。随后是。可能是我经过一次尝试后放弃了。任何想法为什么它不是第一次坚持?
ETA2:作为一个例子,我有一个名为“MyLibrary”的类库和一个名为“MyApp”的测试应用程序。我执行上面的步骤1-4,以下是在C:\ Documents and Settings \ User Name \ Local Settings \ Application Data \ MyApp \ MyApp.vshost.exe_Url_vi5gjcooahbdm2ma3dcay0mkexu2suul \ 1.0.0.0中找到的user.config文件的内容。注意:我没有触摸MyApp中的设置; -
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral >
<section name="MyLibrary.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<MyLibrary.My.MySettings>
<setting name="Name" serializeAs="String">
<value>New changed value</value>
</setting>
</MyLibrary.My.MySettings>
</userSettings>
答案 0 :(得分:1)
我建议查看.NET的XML序列化内容。它工作得很好,我几乎用于所有设置存储的东西。
基本上,创建一个将存储您的设置的类,确保它有一个不带参数的构造函数。
public class Settings
{
public Settings() { }
public string MySetting { get; set; }
}
然后从您的应用程序中,使用这样的函数将其序列化为XML文件:
public static string Serialize<T>(T item) where T:class
{
try
{
XmlSerializer serial = new XmlSerializer(typeof(T));
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
serial.Serialize(writer, item);
writer.Close();
return sb.ToString();
}
catch (Exception ex)
{
Debug.WriteLine("Failed to serialize object of type " + typeof(T).FullName + ": " + ex.Message);
return "Failed to serialize";
}
}
和这样的函数将XML文件反序列化到您的设置类中:
public static T Deserialize<T>(string FilePath) where T : class
{
try
{
XmlSerializer xml = new XmlSerializer(typeof(T));
FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
XmlSerializer xml = new XmlSerializer(typeof(T));
T res = (T)xml.Deserialize(fs);
fs.Close();
return res;
}
catch (Exception ex)
{
Debug.WriteLine("Failed to deserialize object of type " + typeof(T).FullName + ": " + ex.Message);
return default(T);
}
}
祝你好运,并希望它可以帮助你