假设我有两个应用程序A和B.应用程序A具有标准Settings.settings
类型的配置。我已经设置了A的设置public
(而不是默认internal
)。在B中引用A并转到A.Settings.Default
仅产生设计时默认值。没有保存的用户设置。调用Reload
无效。
更简单的是,在LINQPad
中导入对A的引用并转储A.Settings.Default
仅显示默认值。与上面的结果非常相似。
我在SO上发现了几个类似的问题,但没有一个有明确的答案。是否有一种简单的方法可以做一些看似微不足道的任务?
答案 0 :(得分:1)
我们假设您的应用是A.exe和B.exe。
B.exe引用A.exe。
当我运行A.exe时,它会读取/写入用户设置:
C:\Users\<user>\AppData\Local\A\A.exe_Url_ify12bcwso2vevlc4wawlllokphlsntr\1.0.0.0\user.config
当我运行B.exe时,它会读取/写入(来自A.exe)的用户设置:
C:\Users\<user>\AppData\Local\B\B.exe_Url_vhnd4ku3yt2pxsldv3qsblquadzyhg3g\1.0.0.0\user.config
我通过使用procmon.exe
监视A和B exes的磁盘活动来获取这些路径如您所见,用户设置背后的逻辑实际上与应用设置相同。运行时使用当前正在执行的进程名称来存储用户设置,因此无法从A.exe中访问A.exe的设置,因为它们是从A.exe中保存的。
以下是我测试的代码:
A.exe时:
static void Main(string[] args)
{
Console.WriteLine("A.Settings1.Default.AExeSetting1: {0}", A.Settings1.Default.AExeSetting1);
A.Settings1.Default.AExeSetting1 += "-";
Console.ReadLine();
A.Settings1.Default.Save();
}
B.EXE:
static void Main(string[] args)
{
Console.WriteLine("A.Settings1.Default.AExeSetting1: {0}", A.Settings1.Default.AExeSetting1);
A.Settings1.Default.AExeSetting1 += "-";
Console.ReadLine();
A.Settings1.Default.Save();
}