2011-11-18 70 views
1

我试图以编程方式加密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

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

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

所以,代码的上述变化的第一行:

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