介绍性实例
这段代码
Properties.Settings.Default.MyUserSettingBlah = "some new value";
Properties.Settings.Default.Save();
Run Code Online (Sandbox Code Playgroud)
将user.config文件保存到
C:\Users\MyUserName\AppData\Local\My_Company_Name\MyApp_Url_vb2s5kwidefdmxstmabckatcyl5t0lxd\1.0.0.0\user.config
Run Code Online (Sandbox Code Playgroud)
题
如何将user.config保存到
代替
在我的c#表单应用程序(在VS2010中使用.NET 4.0创建)中,我使用应用程序设置来存储输出路径.
以前,此设置配置了用户范围,但我必须将其范围更改为应用程序.
执行此操作后,我现在在启动表单时收到无法识别的配置部分userSettings错误(请注意,在将设置的范围设置为user之前,程序已执行):
InnerException: System.Configuration.ConfigurationErrorsException
Message=Unrecognized configuration section userSettings. (C:\Documents and Settings\Administrator\Local Settings\Application Data\CallCenterForm\CallCenterForm.vshost.exe_StrongName_bplf30wziudnpq0knzaacfuyomd5rv45\1.0.0.0\user.config line 3)
Source=System.Configuration
BareMessage=Unrecognized configuration section userSettings.
Filename=C:\Documents and Settings\Administrator\Local Settings\Application Data\CallCenterForm\CallCenterForm.vshost.exe_StrongName_bplf30wziudnpq0knzaacfuyomd5rv45\1.0.0.0\user.config
Run Code Online (Sandbox Code Playgroud)
所以在做了一些浏览后,这似乎是由系统上仍然存在的旧user.config文件引起的,导致程序读取它并抛出错误(我不确定实际的底层问题是什么).我还可以确认,当我删除文件时,问题就消失了.
这让我想到了我的问题,是否有一种方法可以更改程序,以便它不会读取旧的user.config文件,因为手动删除它并不理想,因为该程序已在多个系统上生产.
抱歉,如果这已经被覆盖,但我找不到答案.
如果这对我的App.config文件的内容有帮助:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CallCenterForm.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
<applicationSettings>
<CallCenterForm.Properties.Settings>
<setting name="saved_output_dir" serializeAs="String">
<value>c:\</value>
</setting>
</CallCenterForm.Properties.Settings>
</applicationSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我正在Windows 8.1上使用C#.NET4.0 VS2010开发Windows桌面应用程序.我使用.NET设置机制存储了一系列设置.它们具有用户范围,因此,在应用程序中设置时,它们将写入Users\username\AppData\Local\companyname\App.exe_URL_randomstuff\versionno\user.config.
这些设置包括我需要隐藏的一些用户注册信息.我的研究表明我应该能够使用RsaProtectedConfigurationProvider加密设置,但我发现的所有示例都与加密app.config而不是user.config有关(例如http://msdn.microsoft.com/en-us /library/system.configuration.rsaprotectedconfigurationprovider.aspx).
因此,我的问题是可以加密user.config,如果是这样,怎么办?我注意到当我实例化System.Configuration.Configuration对象时,我可以将ConfigurationUserLevel设置为PerUserRoamingAndLocal.当我通过调试器检查对象时,它似乎引用了正确的user.config文件,但是当我继续实例时,一个ConfigurationSection来保护它返回null.代码如下所示:
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.PerUserRoamingAndLocal);
ConfigurationSection connStrings = config.AppSettings;
connStrings.SectionInformation.ProtectSection(provider);
Run Code Online (Sandbox Code Playgroud)
我认为config.AppSettings可能不正确,但我不知道该替换它.
任何建议都非常感谢.
我已经安装了.NET应用程序.它的配置位置是
%AppData%\[CompanyName]\[ExeName]_Url_[hash]\[version]\user.config.
我需要[hash]从另一个应用程序中获取价值.
根据MSDN,user.config路径模板是
[c:\Documents and Settings]\[username]\[Local Settings]\Application Data\[companyname]\[appdomainname]_[eid]_[hash]\[version]
[hash]证据的SHA1哈希在哪里(在我的例子中是eid = Url).
我注意到以下事项:
[hash] 应用程序安装路径更改的更改.[hash]总是32个字符长,因此它不是SHA1的十六进制表示,长度为40个字符.看起来[hash]=base32(sha1([install path]))我尝试过不同的值 [install path]
c:\ Program Files ...
file:/// c:\ Program Files ....
file:/// c:\ Program%20Files ...,等
但[hash]总是错的.
我正在运行ac#unit test(VS 2008).在测试中我写了设置,这应该导致将数据保存到user.config.
Settings.Default.X = "History"; // X is string
Settings.Default.Save();
Run Code Online (Sandbox Code Playgroud)
但这根本不会创建文件(我在"C:\ Documents and Settings\HW\Local Settings\Application Data"下交叉检查).
如果我创建与控制台应用程序相同的东西,则持久化数据(相同代码)没有问题.
在UnitTest中我需要考虑做些什么吗?
我厌倦了在托管 C++ 应用程序中搜索如何使用 user.config 而不是 app.config。我发现的所有内容都是关于 C# 的,我无法弄清楚如何转换为 C++(属性命名空间不存在)
任何人都可以让我了解这一点吗?我需要知道如何创建、读取和写入 user.config 文件。
谢谢
user.config ×6
c# ×5
.net ×3
app-config ×2
c++-cli ×1
encryption ×1
hash ×1
settings ×1
unit-testing ×1