Properties.Settings.Default存储在哪里?


145

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

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

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

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

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

我的问题是,这个新值保存在哪里?可执行文件目录中的MyApp.exe.config文件未更新,但仍包含默认值。另外,据我所知,该目录中的其他文件也没有更新!但是,当程序读回值时,它将获得更改后的值,因此我知道它已保存在某处...

这不仅是学术上的,我需要能够在今天早晨手动编辑值,并且当我找不到任何正在变化的东西时让自己陷入困境。


2
重要的是要注意,存储位置可能会在框架或操作系统的不同版本之间改变。不要将任何可编程的硬编码到存储位置。
格雷格D

如果您在Visual Studio中,正在开发一个新的应用程序,然后在AppData \ Local \ Microsoft \ YOUR APPLICATION NAME中检查。文件名是user.config。我在Windows 7中
-JenonD

或在AppData \ Local
一下

我一直在努力的事情导致了这个问题和其他问题:user.config直到applicationsSettings.Save()才创建。叫做。(其中定义了applicationSettings的应用程序设置applicationSettings = new ApplicationSettings(this);)。
amalgamate

Answers:


142

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


3
另外,我相信在Visual Studio中生成的.config最终位于可执行文件的文件夹中,我相信它仅用于调试。在打包最终应用程序时,您不包括此.config,因为它是用户首次运行该应用程序时生成的。
Will Eddins

11
较新的版本?自Windows 2000以来就是这种情况。因为您以管理员身份运行,所以您刚刚摆脱了它。
Joel Coehoorn

1
@Joel Coehoorn:的确如此,但是现在在Windows Vista及更高版本的管理员帐户中,默认情况下,没有UAC提升提示,您将无法获得对程序文件的写访问权限。那是改变的政策。:)
杰森2009年

2
还应注意,该文件夹随每次版本升级而更改-因此,每次更新软件时,用户都会丢失其首选项。
伊恩·博伊德

17
其实不,他们没有。您需要创建一个设置,将其命名为“ UpgradeNeeded”,并将其默认设置为true。然后,当您的应用启动时,请选中此复选框。如果为true,则调用Properties.Settings.Default.Upgrade()、. Save()和.Reload()。然后将UpgradeNeededed重置为false并保存。
杰森2011年

86

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

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

1
嗯,我看到这种情况下返回的路径不是“设置”所使用的路径。有见识吗?
乔治·莫尔

1
@GeorgeMauer您的意思是Roaming或者也许LocalLow不是LocalConfigurationUserLevel取决于用户的配置文件是漫游的还是本地的。在公司中,它经常在漫游。
凯泽德

链接到该答案及其下的评论,显示路径。
凯泽德

我到处都可以找到相同的答案,请使用ConfigurationManager.OpenExeConfiguration()-但这提供了三个选项,具体取决于您传递的ConfigurationUserLevel的值,从而给出三个不同的结果-是吗?您如何在程序中,在运行时,在代码中找出运行该程序的文件的确切位置?
戴夫

无:获取适用于所有用户的配置,PerUserRoaming:获取适用于当前用户的漫游配置,PerUserRoamingAndLocal:获取适用于当前用户的本地配置。
Akbaritabar,

8

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

我必须在应用程序上更新版本,所有设置似乎都消失了。应用程序使用新版本创建了一个新文件夹,并使用了默认设置。花了很长时间才找到文件的存储位置,但这只是一个简单的复制和粘贴操作,即可将设置更改为新版本。


怎么知道LOOKSLIKESOMEKINDOFHASH?
NeoSvet

1
Properties.Settings.Default.Upgrade()调用将自动执行相同的操作。它会从以前的版本还原配置,就像@jasonh在上面的其他回复中所说的那样。
亚历克斯(Alex)

5

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

但是位置可能会改变。


5
实际上,针对用户特定属性的正确环境变量是%userprofile%。在Vista或7下指定“文档和设置”将导致找不到文件夹或缺少对其确实找到的文件夹的权限。
杰森2009年

1

我的Windows服务之一在Windows Server 2016中以本地系统身份登录,我可以在C:\ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {您的应用程序名称}下找到user.config。

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


0

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

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


0

它们保存在中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;
    }
...

-1

对于任何想知道Microsoft Store中应用程序设置在哪里的人,它们都位于WindowsApps中,该应用程序已被锁定,但是您可以通过打开应用程序,然后使用Task-Manager打开文件路径来到达那里。

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


-17

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


1
这是正确的研究与开发中。部署后,它们将移至其他地方。
Joel Coehoorn

2
我在开发环境中运行了该文件,文件保持不变。它仅在其中存储默认值,而不存储更新后的值。
Stan R.

4
Stan R是正确的,它仅存储默认值。不是调试期间可能更改的值。
匿名类型
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.