2011-11-18 55 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);