【问题标题】:App.config - encrypted section error:App.config - 加密部分错误:
【发布时间】:2010-10-14 21:40:09
【问题描述】:

我有一个加密配置文件中的部分的应用程序。在我第一次尝试从配置文件中读取加密部分时,我收到一条错误消息:“无法识别的属性 'configProtectionProvider'。请注意,属性名称区分大小写。”

config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);  
// Get the section in the file.   
ConfigurationSection section = config.GetSection("EncryptedSection");


if (section != null)      
{           
    // Protect the section.
    section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
    section.SectionInformation.ForceSave = true;

    // Save the change.

    config.Save(ConfigurationSaveMode.Modified);  
}  
ConfigurationManager.RefreshSection("EncryptedSection");  
Properties.Settings.Default.Reset();

//This is the part where I read the encrypted section:

ConfigurationManager.RefreshSection("EncryptedSection");
System.Collections.IDictionary HSMMasterKeyConfig = (System.Collections.IDictionary)System.Configuration.ConfigurationManager.GetSection("EncryptedSection");

这只发生在我第一次尝试阅读加密部分时。我注意到 .config 文件在第一次保存后立即更新,但由于某种原因,我需要重新启动应用程序才能使用加密部分。

【问题讨论】:

  • 哼,在运行时修改配置文件不是典型的用法。您或许应该在 Microsoft Connect 上报告问题。

标签: c# .net xml configuration


【解决方案1】:

你看完了吗……

http://bytes.com/groups/net/521818-configurationerrorexception-when-reading-protected-config-section

...因为这似乎是涉及直接映射到您的情况的 MSFT 支持工程师的对话。

【讨论】:

  • 我也遇到了这个问题(在 .NET 3.5 中),但它似乎在 .NET 4.0 中得到了修复。
【解决方案2】:

执行此操作的最佳方法是仅在安装期间加密 app.config 部分。将安装程序类添加到您的项目并覆盖该类中的 Install 方法。在这种方法中,您应该执行加密。您必须在覆盖的 Install 方法结束时调用 base.Install。在安装项目中,转到自定义操作并找到要使用您的项目输出 [exe 或程序集] 指向的安装自定义操作,其中包含您的安装程序类实现的定义。这样,它将在安装过程中直接加密您的 app.Config 部分,您将不会遇到此问题。应用程序将自动使用 DPAPI 提供程序来读取/写入部分或设置。

【讨论】:

【解决方案3】:

供您参考,问题是尝试加密配置部分的进程没有管理员权限。我将此过程添加到管理员组并解决了它。

【讨论】:

    【解决方案4】:

    我今天也遇到了同样的问题。通常,每当我启动配置加密的应用程序时,我总是在启动时检查配置以确定它是否受到保护。如果不是,我遵循标准的 SectionInformation.ProtectSection 方法。这始终是我的第一步,但今天出于某种原因,我决定在执行保护检查并得到“无法识别的属性'configProtectionProvider'之前从配置中引用一些东西。请注意,属性名称区分大小写。”错误。您所要做的就是在正常代码中引用配置之前运行保护代码,您将不再有错误。

    【讨论】:

      【解决方案5】:

      尝试在单独的应用程序域中运行您的 Exe。一旦您的应用程序加载到新的 AppDomain 中,请检查这些部分是否已加密。如果不是,则加密该部分并触发 AppDomain 再次卸载并重新加载您的可执行文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-05
        • 2011-02-10
        • 2011-08-13
        • 2018-03-16
        • 2011-04-19
        • 2013-09-07
        • 2010-10-13
        相关资源
        最近更新 更多