在.NET中使用Settings.settings文件时,配置实际存储在哪里?


100

在.NET中使用Settings.settings文件时,配置实际存储在哪里?我想删除已保存的设置以恢复为默认状态,但是找不到它的存储位置...有什么想法吗?

Answers:


100

这取决于您选择的设置是在“用户”范围还是在“应用程序”范围。

用户范围

用户范围设置存储在

C:\ Documents and Settings \ 用户名 \ Local Settings \ Application Data \ ApplicationName

您可以在运行时读取/写入它们。

对于Vista和Windows 7,文件夹为

C:\ Users \ 用户名 \ AppData \ Local \ ApplicationName

要么

C:\ Users \ 用户名 \ AppData \ Roaming \ ApplicationName

适用范围

应用程序作用域设置保存在其中,AppName.exe.config并且在运行时为只读。


20
在Vista和Win7上用于用户范围设置的文件夹是C:\ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version或C:\ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version设置窗格上的漫游属性值。
jakdep,2010年

4
除非其为插件,否则为AppName.dll.config
匿名类型

4
我在Windows 7上的本地user.config位于C:\ Users \ <用户名> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder 2015年

53

这是可用于以编程方式获取user.config文件位置的代码段:

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

默认情况下,ApplicationSettings(即settings.settings)使用PerUserRoamingAndLocal进行用户设置(我记得)。

更新:奇怪,但是这里有太多不正确的答案。如果您要查找用户范围设置文件(user.config),它将位于以下文件夹(对于Windows XP):

C:\ Documents and Settings \(用户名)\ Local Settings \ Application Data \(如果存在的公司名称)\(app名称).exe_(Url | StrongName)_(哈希)\(app版本)\

URL或StrongName取决于您是否具有应用程序程序集的强名称。


知道导致该路径中的哈希值变化的原因是什么?我的应用程序的每个后续发行版都获得不同的哈希值,这使调用ApplicationSettingsBase.Upgrade()变得徒劳无功。:/
马尔罗斯(Mal Ross)2015年

2
哈希是应用签名时的StrongName的SHA1哈希,或者是应用未签名时的path。这里更多msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
仲裁者

20

假设您是在谈论桌面而不是Web应用程序:

当您将设置添加到项目时,VS会app.config在项目目录中创建一个名为的文件,并将设置存储在该文件中。它还构建了Settings.cs为各个设置提供静态访问器的文件。

在编译时,VS将(默认情况下;您可以更改)将其复制app.config到构建目录,更改其名称以匹配可执行文件(例如,如果您的可执行文件名为foo.exe,该文件将被命名foo.exe.config),即。 NET配置管理器在运行时检索设置时会进行查找。

如果您通过VS设置编辑器更改设置,它将同时更新app.configSettings.cs。(如果您在中生成的代码中查看属性访问器Settings.cs,则会看到它们被标记为包含app.config文件中设置默认值的属性。)如果您通过app.config直接编辑文件来更改设置,Settings.cs不会被更新,但是新值在运行时仍将由程序使用,因为在编译时app.config将其复制到foo.exe.config该值。如果关闭此设置(通过设置文件的属性),则可以通过直接foo.exe.config在构建目录中编辑文件来更改设置。

然后是用户范围的设置。

应用程序作用域设置是只读的。您的程序可以修改和保存用户范围的设置,从而允许每个用户拥有自己的设置。这些设置不会存储在foo.exe.config文件中(至少在Vista下,程序无法写入Program Files没有提升权限的任何子目录)。它们存储在用户应用程序数据目录中的配置文件中。

该文件的路径是%appdata%\%publisher_name%\%program_name%\%version%\user.config例如C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config。请注意,如果您为程序指定了强名称,则该名称将在此路径后附加到程序名称中。


1
看起来路径的My_Company组件将默认为Microsoft。如果有人知道这样做会很好,我还没有找到一种方法可以更改它的实际作用。

1
user565869,您是否在Visual Studio中尝试过,打开项目属性的“应用程序”选项卡,单击“程序集信息”按钮,然后应该可以更改公司了?对解决方案中的每个项目重复上述步骤
gg89'9

15

在浏览以了解文件夹名称中的哈希值时,我遇到了(通过此答案):

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(编辑:Wayback Machine链接:https ://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

user.config文件的确切路径如下所示:

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

哪里

<Profile Directory>-是漫游配置文件目录还是本地目录。默认情况下,设置存储在本地user.config文件中。要存储设定的漫游user.config文件,你需要标记的设置与SettingsManageabilityAttribute使用SettingsManageability设置为Roaming

<Company Name>-通常是由指定的字符串AssemblyCompanyAttribute(需要警告的是,该字符串会根据需要进行转义和截断,如果未在程序集上指定,则有一个后备过程)。

<App Name>-通常是由AssemblyProductAttribute(与公司名称相同的警告)指定的字符串。

<Evidence Type><Evidence Hash>-从所述应用程序域的证据中得到的信息,以提供适当的应用程序域和组件隔离。

<Version>-通常是中指定的版本AssemblyVersionAttribute。这是隔离并排部署的应用程序的不同版本所必需的。

文件名始终只是“ user.config”。


不幸的是,博客链接已断开。我敢肯定这会很有趣。
UweBaemayr

3

它位于用户主文件夹中Application Application文件夹中的应用程序名称文件夹中(xp上为C:\ documents and settings \ user,Windows Vista上为c:\ users \ user)。

这里也有一些信息。

PS:-尝试在运行框中通过%appdata%访问它!


2

嗯,您不仅可以使用Settings.Default.Reset()来还原默认设置吗?


1

您的所有设置都存储在各自的.config文件中。

.settings文件只是为一组属于一起的设置提供了一个强类型化的类,但是实际设置存储在app.config或应用程序中的.config文件中。

如果添加.settings文件,则如果没有设置,则将自动添加一个app.config来容纳设置。


1

如果您的设置文件在Web应用程序中,则将在web.config文件中(位于项目下方)。如果在其他任何类型的项目中,则将在app.config文件中(也位于项目下方) 。

编辑

正如评论中指出的那样:设计时应用程序设置位于Web应用程序以外的应用程序的app.config文件中。生成时,app.config文件将复制到输出目录,并将命名为yourexename .exe.config。在运行时,将仅读取名为yourexename.exe.config的文件。


1
不正确。正在运行的应用程序中没有app.config设置文件,因为app.config将重命名为[appname] .exe.config。而且无论如何,此文件将仅包含settings.settins中的ApplicationScoped设置。
仲裁

@arbiter:也许我误解了这个问题,但是Adam似乎在询问设计时的默认值。这些存储在app.config中。在构建时,会将app.config文件复制到构建目录,然后重命名为(theapp.exe.config)。但是,如果直接编辑该文件(并且在Visual Studio中工作),则存在下次构建内容被覆盖的风险。底线:对于已部署的应用程序(或者如果您在IDE外部运行),请更改name.exe.config文件。如果您在VS中工作,请更改设置或app.config中的默认值
JMarsch

0

两个文件:1)一个app.config或web.config文件。可以使用文本编辑器在构建后自定义她的设置。2)settings.designer.cs文件。该文件具有自动生成的代码,可从配置文件中加载设置,但是如果配置文件没有特定设置,则还会提供默认值。


0

我知道它已经回答了,但是您不能仅同步设置设计器中的设置以移回默认设置吗?

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.