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

Ada*_*ile 94 .net c# settings

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

Sol*_*ogi 98

这取决于您选择的设置是"用户"范围还是"应用程序"范围.

用户范围

用户范围设置存储在

C:\Documents and Settings\ username \Local Settings\Application Data\ ApplicationName

您可以在运行时读/写它们.

对于Vista和Windows 7,文件夹是

C:\Users\ username \AppData\Local\ ApplicationName

要么

C:\Users\ username \AppData\Roaming\ ApplicationName

适用范围

应用程序范围设置保存AppName.exe.config在运行时,它们是只读的.

  • Vista和Win7上用户范围设置的文件夹是C:\ Users\username\AppData\Local\ApplicationName\Publisher\ApplicationName\Version或C:\ Users\username\AppData\Roaming\ApplicationName\Publisher\ApplicationName\Version取决于"设置"窗格上的"漫游"属性值. (20认同)
  • 除非它是一个插件,在这种情况下它将是AppName.dll.config (4认同)
  • 我在Windows 7上的本地user.config位于C:\ Users\<用户名>\AppData\Local\Publisher\ApplicationName_Eid_EvidenceHash\Version (3认同)

arb*_*ter 51

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

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

ApplicationSettings(即settings.settings)默认使用PerUserRoamingAndLocal进行用户设置(我记得).

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

C:\ Documents and Settings \(用户名)\ Local Settings\Application Data \(company-name-if-exists)\(app-name).exe_(Url | StrongName)_(hash)\(app-version)\

Url或StrongName取决于您是否具有应用程序集强名称.

  • Hash是应用程序签名时StrongName的SHA1哈希值,或者是应用程序未签名时的路径.更多信息请访问https://msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx (2认同)

Rob*_*ney 17

假设您在谈论桌面而不是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.请注意,如果您为程序指定了强名称,则强名称将附加到此路径中的程序名称.


see*_*ker 13

在浏览以找出文件夹名称中的哈希时,我遇到了(通过这个答案):

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'.