Como atualizar as chaves (Adicionar / Modificar / Excluir) na seção AppSettings do web.config no tempo de execução

Eu gosto de atualizar chaves / valores definidos emAppSettings Seção deWeb.config em tempo de execução. no entanto eu não quero realmente salvá-los paraWeb.config Arquivo.

Eu tenho um enorme aplicativo web que consiste em vários módulos, DLLs e arquivos de código-fonte. Um monte de informações críticas variava de configuração do banco de dados, chaves de criptografia, nome de usuário e senhas para webservices são salvos emAppSettings seção doweb.config Arquivo. Requisito recente do projeto precisa que eu mova esses valores para foraweb.config e mantenha em um armazenamento seguro.

Eu já assegurei esses valores em um local externo e posso lê-los novamente quando o aplicativo é iniciado.

Aqui está o código de exemplo.

Global.asax

public class Global: System.Web.HttpApplication {
    protected void Application_Start(object sender, EventArgs e) {
        Dictionary<string, string> secureConfig = new Dictionary<string,string>{};

        // --------------------------------------------------------------------
        // Here I read and decrypt keys and add them to secureConfig dictionary
        // To test assume the following line is a key stored in secure sotrage.
        //secureConfig = SecureConfig.LoadConfig();
        secureConfig.Add("ACriticalKey","VeryCriticalValue");
        // --------------------------------------------------------------------

        foreach (KeyValuePair<string, string> item in secureConfig) {
            ConfigurationManager.AppSettings.Add(item.Key, item.Value);
        }
    }
}

Como você pode notar, não é viável alterar as referências aAppSettings em um código enorme criado por várias equipes de programação para ler suas configurações do meusecureConfig dictionary e por outro lado eu não deveria salvar esses valores emweb.config arquivo que está disponível para administradores e operadores da web, administradores do sistema e administradores da nuvem.

Para facilitar a vida dos programadores, quero que eles adicionem seus valoresAppSettings Seção deweb.config durante o desenvolvimento, mas eles serão removidos de lá e colocados para proteger o armazenamento mais tarde durante a implantação, no entanto, esses valores devem estar disponíveis para serem programados de forma transparente, pois ainda estão disponíveis.AppSettings seção.

Questão: como posso adicionar valores aAppSettings em tempo de execução para que o programa possa lê-los usandoConfigurationManager.AppSettings["ACriticalKey"] para obter"VeryCriticalValue" sem salvá-los no Web.Config?

Observe: ConfigurationManager.AppSettings.Add(item.Key, item.Value); me dáConfigurationErrorsException com mensagemThe configuration is read only.

Observe: De preferência, algumas configurações devem poder permanecerAppSettings como antes

questionAnswers(4)

yourAnswerToTheQuestion