c# - 加密 app.config 后无法识别的属性 'configProtectionProvider'

标签 c# asp.net winforms

我在我的应用程序开始时运行以下方法,传递一个位于 applicationSettings 下的部分:

public static void EncryptConfigSection(string sectionKey)
    {
        Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ConfigurationSection section = 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 中的部分示例:

<applicationSettings>
  <Example.Properties.Settings>
    <setting name="Key" serializeAs="String">
      <value>Value</value>
    </setting>
  </Example.Properties.Settings>
</applicationSettings>

当我尝试访问该部分的任何设置时,我收到以下错误:

Unrecognized attribute 'configProtectionProvider'

这是一个桌面应用程序,需要在启动时加密一些设置,然后在退出时解密。

有人能解决这个问题吗?

最佳答案

我找到了这个:http://andybrennan.wordpress.com/2014/06/05/unrecognized-attribute-configprotectionprovider-after-encrypting-app-config/ .它解决了这个问题。

就用博客上写的这个方法:

private void ResetConfigMechanism()
{
    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);
}

保存/刷新配置后调用它。

关于c# - 加密 app.config 后无法识别的属性 'configProtectionProvider',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856951/

相关文章:

c# - 在 C# 中异步使用 IComparer

asp.net - 即使在 FormsAuthentication.SignOut() 之后 User.IsOnline = true

ASP.NET MVC + SQL Server 应用程序 : Best Way to Send Out Event-Driven E-mail Notifications

C#:有效地搜索大字符串以查找其他字符串的出现

c# - 在 C# 中生成一个均分为另一个的随机数

asp.net - 使用 Twitter BootStrap Css Toolkit 时没有侧边栏的全宽内容

c# - 使用不带反射的字符串获取属性

C# 为什么不能设置动态创建的组合框的 selectedValue?

c# - Winforms 图形闪烁。 (双缓冲没有帮助!)

c# - 如何让 MVVM Light Messenger 与 PCL 配合使用