Answers:
这取决于您选择的设置是在“用户”范围还是在“应用程序”范围。
用户范围设置存储在
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
并且在运行时为只读。
这是可用于以编程方式获取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取决于您是否具有应用程序程序集的强名称。
假设您是在谈论桌面而不是Web应用程序:
当您将设置添加到项目时,VS会app.config
在项目目录中创建一个名为的文件,并将设置存储在该文件中。它还构建了Settings.cs
为各个设置提供静态访问器的文件。
在编译时,VS将(默认情况下;您可以更改)将其复制app.config
到构建目录,更改其名称以匹配可执行文件(例如,如果您的可执行文件名为foo.exe
,该文件将被命名foo.exe.config
),即。 NET配置管理器在运行时检索设置时会进行查找。
如果您通过VS设置编辑器更改设置,它将同时更新app.config
和Settings.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
。请注意,如果您为程序指定了强名称,则该名称将在此路径后附加到程序名称中。
在浏览以了解文件夹名称中的哈希值时,我遇到了(通过此答案):
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
”。
嗯,您不仅可以使用Settings.Default.Reset()来还原默认设置吗?
您的所有设置都存储在各自的.config文件中。
.settings文件只是为一组属于一起的设置提供了一个强类型化的类,但是实际设置存储在app.config或应用程序中的.config文件中。
如果添加.settings文件,则如果没有设置,则将自动添加一个app.config来容纳设置。
如果您的设置文件在Web应用程序中,则将在web.config文件中(位于项目下方)。如果在其他任何类型的项目中,则将在app.config文件中(也位于项目下方) 。
编辑
正如评论中指出的那样:设计时应用程序设置位于Web应用程序以外的应用程序的app.config文件中。生成时,app.config文件将复制到输出目录,并将命名为yourexename .exe.config。在运行时,将仅读取名为yourexename.exe.config的文件。
我知道它已经回答了,但是您不能仅同步设置设计器中的设置以移回默认设置吗?