加密app.config后无法识别的属性“configProtectionProvider”EncryptConfigSection(stringsectionKey){配置配置=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);ConfigurationSectionsection=config.GetSection(sectionKey);if(section!=null){if(!section.SectionInformation.IsProtected){if(!section.ElementInformation.IsLocked){section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");section.SectionInformation.ForceSave=true;config.Save(ConfigurationSaveMode.Full);ConfigurationManager.RefreshSection(sectionKey);}}}}以下是app.config中该部分的示例:Value当我尝试访问该部分中的任何设置时,出现以下错误:无法识别的属性“configProtectionProvider”这是一个桌面应用程序,需要一些东西启动时加密这些设置然后在退出时解密。有人能解决这个问题吗?我发现了这个:http://andybrennan.wordpress.com/2014/06/05/unrecognized-attribute-configprotectionprovider-after-encrypting-app-config/。它解决了这个问题。只需使用博客上写的这个方法:privatevoidResetConfigMechanism(){typeof(ConfigurationManager).GetField("s_initState",BindingFlags.NonPublic|BindingFlags.Static).SetValue(null,0);typeof(ConfigurationManager).GetField("s_configSystem",BindingFlags.NonPublic|BindingFlags.Static).SetValue(null,null);typeof(ConfigurationManager).Assembly.GetTypes().Where(x=>x.FullName=="System.Configuration.ClientConfigPaths")。First().GetField("s_current",BindingFlags.NonPublic|BindingFlags.Static).SetValue(null,null);这是在保存/刷新配置后调用的。根据这篇博文,解决方法是在父级上调用RefreshSection():RefreshSection("applicationSettings")UnrecognizedpropertyconfigProtectionProvider我设法让RickSchott的答案起作用,但有一个重要的警告-你不能使用静态版本ConfigurationManager.GetSection检索刷新的部分-您必须使用Configuration.GetSection。完整代码:Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);ConfigurationSectionsection=config.GetSection("passwordSection")asConfigurationSection;if(!section.SectionInformation.IsProtected){//加密section.section.SectionInformation.ProtectSection("DPAPIProtection");section.SectionInformation.ForceSave=true;config.Save(ConfigurationSaveMode.Modified);//密码现在已加密。//刷新密码所在部分的*parent*。ConfigurationManager.RefreshSection("configuration");//现在使用Configuration.GetManager检索新密码部分。//这不会抛出配置异常:)ConfigurationSectionsection2=config.GetSection("passwordSection")asConfigurationSection;在应用程序运行时加密/解密配置文件并继续读取值。虽然不是我想要的,但解决问题的方法是在应用程序运行之前首先加密/解密.config。这是另一种我没有做但看起来很有趣的方法:在.NETapp.config文件中加密密码这篇文章只是节省了我的时间,以防有人需要在vb和2017中修复上述问题,这是C#学习教程:所有内容由app.config加密后无法识别的属性'configProtectionProvider',如果对你有用,需要了解更多C#学习教程,希望大家多多关注——PrivateSubResetConfigMechanism()GetType(ConfigurationManager)。GetField("s_initState",BindingFlags.NonPublic或BindingFlags.Static).SetValue(Nothing,0)GetType(ConfigurationManager).GetField("s_configSystem",BindingFlags.NonPublic或BindingFlags.Static).SetValue(Nothing,Nothing)GetType(Configuration)).Assembly.GetTypes().Where(Function(x)x.FullName="System.Configuration.ClientConfigPaths").First().GetField("s_current",BindingFlags.NonPublic或BindingFlags.Static).SetValue(Nothing,无)EndSub本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
