读取app.config中encryptedAppSettings节失败?.NET配置异常求助
解决.NET配置文件读取加密节返回null及"Required attribute 'Key' not found"异常
你的配置文件和读取逻辑存在几个明显错误,逐一修正即可解决问题:
错误点及修正方案
配置节定义格式错误
你在configSections里定义encryptedAppSettings时,type属性没有用引号包裹,且缺少完整的程序集标识信息,Culture-neutral的写法也不符合规范。正确的NameValueSectionHandler类型定义需要包含程序集版本、文化和公钥令牌:<section name="encryptedAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />同时
applicationSettings节组的type属性里,PublicKeyToken的引号位置错误,修正为:<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />配置项属性名错误
NameValueSectionHandler要求配置项使用key属性指定键名,你当前用的是name,这直接导致了"Required attribute 'Key' not found"的异常。把name改成key:<encryptedAppSettings> <add key="UnitTests.Properties.Settings.connectionString.password" value="password" /> </encryptedAppSettings>Provider类型拼写错误
ConfigProtectedData里的provider配置中,Culture=newutral是拼写错误,修正为Culture=neutral:<add name="MyProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
修正后的完整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="encryptedAppSettings" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <ConfigProtectedData> <providers> <add name="MyProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </ConfigProtectedData> <connectionStrings> <add name="UnitTests.Properties.Settings.connectionString" connectionString="...UserId=username;Password={0}" /> </connectionStrings> <encryptedAppSettings> <add key="UnitTests.Properties.Settings.connectionString.password" value="password" /> </encryptedAppSettings> </configuration>
正确读取加密节的代码
using System.Configuration; // 读取加密配置节 var encryptedSettings = ConfigurationManager.GetSection("encryptedAppSettings") as NameValueCollection; if (encryptedSettings != null) { string password = encryptedSettings["UnitTests.Properties.Settings.connectionString.password"]; // 拼接完整连接字符串 var connStringSetting = ConfigurationManager.ConnectionStrings["UnitTests.Properties.Settings.connectionString"]; if (connStringSetting != null) { string fullConnString = string.Format(connStringSetting.ConnectionString, password); // 使用fullConnString进行数据库操作 } }
内容的提问来源于stack exchange,提问作者Tony Vitabile
相关产品推荐
相关产品推荐

