我正在尝试以编程方式加密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");
这样可以正常运行而不会出现任何错误,但不会对给定文件进行任何更改。这就好像它并没有真正访问我想要访问的文件。
有什么想法吗?
答案 0 :(得分:1)
对,回答我自己的问题......
代码确实没有打开正确的配置文件。为此,我们需要使用ConfigurationManager.OpenMappedExeConfiguration()
而不是ConfigurationManager.OpenExeConfiguration()
。
因此,上面代码的第一行更改为:
var map = new ExeConfigurationFileMap { ExeConfigFilename = configFilePath };
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);