加密配置部分

时间:2011-11-18 16:04:56

标签: configuration web-config app-config

我正在尝试以编程方式加密App.config和Web.config文件的配置部分。在下面的代码中,我在configFilePath变量中设置了我想要编辑的路径配置文件,然后期望它加密connectionStrings部分。

        var config = ConfigurationManager.OpenExeConfiguration(configFilePath);
        var section = config.GetSection("connectionStrings");
        if (section.SectionInformation.IsProtected)
        {
            section.SectionInformation.UnprotectSection();
            section.SectionInformation.ForceSave = true;
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("connectionStrings");
        }

        section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
        section.SectionInformation.ForceSave = true;
        config.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection("connectionStrings");

这样可以正常运行而不会出现任何错误,但不会对给定文件进行任何更改。这就好像它并没有真正访问我想要访问的文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对,回答我自己的问题......

代码确实没有打开正确的配置文件。为此,我们需要使用ConfigurationManager.OpenMappedExeConfiguration()而不是ConfigurationManager.OpenExeConfiguration()

因此,上面代码的第一行更改为:

var map = new ExeConfigurationFileMap { ExeConfigFilename = configFilePath };   
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);