【问题标题】:When using a Settings.settings file in .NET, where is the config actually stored?在 .NET 中使用 Settings.settings 文件时,配置实际存储在哪里?
【发布时间】:2010-11-07 16:39:08
【问题描述】:

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

【问题讨论】:

    标签: c# .net settings


    【解决方案1】:

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

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

    【讨论】:

    • 不幸的是,博客链接已损坏。我敢肯定这会很有趣。
    【解决方案2】:

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

    用户范围

    用户范围设置存储在

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

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

    对于 Vista 和 Windows 7,文件夹是

    C:\Users\ 用户名 \AppData\Local\ 应用程序名

    C:\Users\ 用户名 \AppData\Roaming\ 应用程序名

    应用范围

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

    【讨论】:

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

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

    编辑

    正如 cmets 中所指出的:您的设计时应用程序设置位于 web 应用程序以外的应用程序的 app.config 文件中。构建时,app.config 文件被复制到输出目录,并将命名为 yourexename.exe.config。在运行时,只会读取名为 yourexename.exe.config 的文件。

    【讨论】:

    • 不正确。正在运行的应用程序中没有 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
    【解决方案4】:

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

    还有一些信息here

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

    【讨论】:

      【解决方案5】:

      这里是可以用来以编程方式获取 user.config 文件位置的 sn-p:

      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:\文档和 设置\(用户名)\本地 设置\应用程序 Data\(company-name-if-exists)\(app-name).exe_(Url|StrongName)_(hash)\(app-version)\

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

      【讨论】:

      • 知道是什么导致了该路径中的散列吗?我的应用程序的每个后续版本都会获得不同的哈希值,这使得调用 ApplicationSettingsBase.Upgrade() 是徒劳的。 ://
      • Hash 是应用签名时 StrongName 的 SHA1 哈希或应用未签名时的路径。更多这里msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
      【解决方案6】:

      我知道它已经得到答复,但您不能在设置设计器中同步设置以恢复默认设置吗?

      【讨论】:

        【解决方案7】:

        呃,你不能只使用 Settings.Default.Reset() 来恢复你的默认设置吗?

        【讨论】:

          【解决方案8】:

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

          【讨论】:

          • 看起来路径的 My_Company 组件将默认为 Microsoft。如果有人知道添加它会很好,我还没有找到一种实际可行的方法来改变它。
          • user565869,你有没有在visual studio中试过,打开项目属性的应用程序选项卡,点击程序集信息按钮,然后你应该可以更改公司了?对解决方案中的每个项目重复此操作
          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

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

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

            如果您添加 .settings 文件,则会自动添加一个 app.config 来存放设置(如果您还没有)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-06-06
              • 2018-09-02
              • 1970-01-01
              • 1970-01-01
              • 2021-02-21
              • 1970-01-01
              • 1970-01-01
              • 2023-03-25
              相关资源
              最近更新 更多