此代码的 User 属性设置为User
范围:
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ConsoleApplication4.Settings1.Default["User"]); //prints "DefaultUser"
ConsoleApplication4.Settings1.Default["User"] = "abc";
Console.WriteLine(ConsoleApplication4.Settings1.Default["User"]);
ConsoleApplication4.Settings1.Default.Save();
Console.Read();
}
}
}
将设置保存到一个不起眼的位置:
C:\Users\用户名\AppData\Local\ConsoleApplication4\ConsoleApplication4.exe_Url_acauylh2btl2j4ed0ilz0mujq5aomfmu\1.0.0.0
因此,即使在您的app.config中,您在多次运行应用程序后仍会看到“默认用户”:
<userSettings>
<ConsoleApplication4.Settings1>
<setting name="User" serializeAs="String">
<value>Default User</value>
</setting>
</ConsoleApplication4.Settings1>
</userSettings>
在User.Config中,它将是用户的最后一个设置值。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<ConsoleApplication4.Settings1>
<setting name="User" serializeAs="String">
<value>abc</value>
</setting>
</ConsoleApplication4.Settings1>
</userSettings>
</configuration>
当我第一次运行此代码时,输出是“默认用户”,“abc”,第二次运行输出是“abc”“abc”
也许这正是Save();
你所缺少的。
如果您的 App.Config 文件与程序一起存储在某处的 Program Files 下,则普通用户(非管理员、非超级用户)将无法写入该文件。
在调试会话之间保留 app.config 中的数据
您必须编写从 PreBuild 事件触发的 exe 或脚本,该事件将 User.Config 设置写回 settings1.settings 文件,然后内置到 App.Config 中。
我不认为你想这样做,因为 User.config 会覆盖 App.Config 并且第二次调试代码时你会得到“abc”“abc”。
我非常有信心这只是Save()
缺少的。或者应用程序范围设置应该是只读的。