ChatGPT解决这个技术问题 Extra ChatGPT

Properties.Settings.Default 存储在哪里?

我以为我知道这一点,但今天我再次被证明是错误的。

运行 VS2008、.NET 3.5 和 C#。我使用默认值将用户设置添加到属性设置选项卡中,然后使用以下代码读取它们:

myTextBox.Text = Properties.Settings.Default.MyStringProperty;

然后,在用户编辑选项对话框中的值后,我将其保存如下:

Properties.Settings.Default.MyStringProperty = myTextBox.Text;
Properties.Settings.Default.Save();

我的问题是,这个新值保存在哪里?可执行目录中的 MyApp.exe.config 文件没有更新,它仍然包含默认值。另外,据我所知,该目录中的其他文件也没有更新!但是,当程序重新读取该值时,它会获取更改后的值,所以我知道它保存在某个地方......

这不仅仅是学术性的,今天早上我需要能够手动编辑值,当我找不到任何正在改变的东西时,我感到很困惑。

请务必注意,存储位置可能会在不同版本的框架或操作系统之间发生变化。不要将任何编程的东西硬编码到存储位置。
如果您在 Visual Studio 中开发新应用,请检查 AppData\Local\Microsoft\YOUR APPLICATION NAME 文件名为 user.config。我在 Windows 7
或在 AppData\Local 下
我一直在努力解决的问题导致我提出了这个问题和其他问题:直到 applicationsSettings.Save(); 才创建 user.config;叫做。 (其中 applicationSettings 定义为 ApplicationSettings applicationSettings = new ApplicationSettings( this );)。

b
bluish

为了使用较新版本的 Windows 策略,默认情况下只允许对 Program Files 文件夹进行读取访问(除非您提示使用 UAC 进行提升,但这是另一个主题......),您的应用程序将在 { 1} 或 %userprofile%\Local Settings\Application Data 取决于您运行的 Windows 版本,用于用户特定的设置。如果您存储所有用户的设置,那么它们将位于所有用户配置文件的 C:\usersC:\Documents and Settings 下的相应文件夹中(例如:C:\users\public\appdata\local)。


此外,在 Visual Studio 中生成的 .config 最终位于可执行文件的文件夹中,我相信它仅用于调试。打包最终应用程序时,您不包含此 .config,因为它是在用户第一次运行应用程序时生成的。
较新的版本?自 Windows 2000 以来就是这种情况。您只是侥幸逃脱,因为您以管理员身份运行。
@Joel Coehoorn:是的,但是现在在 Windows Vista 及更高版本的管理员帐户中,默认情况下,如果没有 UAC 提升提示,您将无法获得对 Program Files 的写入权限。这就是改变的政策。 :)
还应注意,每次版本升级时文件夹都会更改 - 因此每次更新软件时用户都会丢失他们的偏好。
实际上不,他们没有。您需要创建一个设置,将其命名为“UpgradeNeeded”,并将其默认为 true。然后,当您的应用程序启动时,请检查此项。如果为真,请调用 Properties.Settings.Default.Upgrade()、.Save() 和 .Reload()。然后将 UpgradeNeeded 重置为 false 并保存。
S
Stephen Oberauer

您可以通过编程方式获取路径:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

嗯,我看到此返回的路径不是设置使用的路径的情况。有什么见解吗?
@GeorgeMauer 您的意思是 Roaming 或者可能是 LocalLow 而不是 LocalConfigurationUserLevel 取决于用户的配置文件是漫游还是本地。在公司中,它通常是漫游的。
链接到 this answer 和我在它下面的评论,显示路径的样子。
我到处都找到相同的答案,使用 ConfigurationManager.OpenExeConfiguration() - 但是根据您传递的 ConfigurationUserLevel 的值提供三个选项,这会给出三个不同的结果 - 是什么?您如何在程序中、代码中、在运行时准确地找出程序从哪个文件中获取其设置?
None:获取适用于所有用户的配置, PerUserRoaming:获取适用于当前用户的漫游配置, PerUserRoamingAndLocal:获取适用于当前用户的本地配置。
J
Jeremy Ehret

感谢您为我指明正确的方向。我发现 user.config 位于这个怪物:c:\users\USER\AppData\Local\COMPANY\APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH\VERSION\user.config。

我不得不升级我的应用程序的版本,所有设置似乎都消失了。应用程序使用新版本创建了一个新文件夹并使用了默认设置。花了很长时间才找到文件的存储位置,但随后只需简单的复制和粘贴即可将设置更新到新版本。


怎么知道LOOKSLIKESOMEKINDOFHASH?
Properties.Settings.Default.Upgrade() 调用会自动执行相同的操作。它从以前的版本恢复配置,就像@jasonh 在上面的其他回复中所说的那样。
@NeoSvet 和其他遇到此问题的人,请参阅此 SO question,了解如何生成哈希。
S
Stan R.

它保存在您的 Documents and Settings\%user%\Local Settings\Application Data......etc 中搜索名为 user.config 的文件

但是位置可能会改变。


实际上,用户特定属性的正确环境变量是 %userprofile%。在 Vista 或 7 下指定 Documents and Settings 将导致缺少文件夹或缺少对它找到的文件夹的权限。
它帮助了我很多...谢谢斯坦🤟
P
Paolo Munaretto

如果您使用 Windows 10,这是目录:

C:\Users<用户名>\AppData\Local\

+

\1.0.0.0


你知道是什么控制 Url_somedata 位吗?
E
EvilDuck

我的一项 Windows 服务在 Windows Server 2016 中以本地系统身份登录,我可以在 C:\Windows\SysWOW64\config\systemprofile\AppData\Local\{your application name} 下找到 user.config。

我认为最简单的方法是在 C 盘上搜索您的应用程序名称,然后检查 user.config 的位置


L
Luke

它们保存在 YOUR_APP.exe.config 中,文件与 YOUR_APP.exe 文件保存在同一文件夹中,<userSettings> 部分:

   <userSettings>
      <ShowGitlabIssues.Properties.Settings>
         <setting name="SavedUserName" serializeAs="String">
            <value />
         </setting>
         <setting name="SavedPassword" serializeAs="String">
            <value />
         </setting>
         <setting name="CheckSave" serializeAs="String">
            <value>False</value>
         </setting>
      </ShowGitlabIssues.Properties.Settings>
   </userSettings>

这是cs代码:

public void LoadInfoLogin()
{
    if (Properties.Settings.Default.CheckSave)// chkRemember.Checked)
    {
        txtUsername.Text = Properties.Settings.Default.SaveUserName;
        txtPassword.Text = Properties.Settings.Default.SavePassword;
        chkRemember.Checked = true;
    }
...

J
Joel Coehoorn

用户特定的设置保存在该应用程序的用户应用程序数据文件夹中。查找 user.config 文件。

我不知道您的期望是什么,因为用户通常一开始甚至没有对可执行目录的写访问权。


h
haldo

对于任何想知道 Microsoft Store 中应用程序设置在哪里的人,它们要么在非常锁定的 WindowsApps 中,但你可以通过打开应用程序然后使用任务管理器打开文件路径来到达那里。

但它们更有可能保存在 C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


J
J.W.

在您的项目根文件夹下有一个名为“Properties”的文件夹,该文件夹下有 *.settings 文件。那就是它被存储的地方。


在开发过程中是正确的。部署后他们去别处。
我在开发环境中运行它并且文件保持不变。它只在那里存储默认值,而不是更新的。
Stan R 是正确的,它只存储默认值。不是您在调试期间可能更改的值。