none
Como alterar o Arquivo app.Config gerado pelo C# ? RRS feed

  • Pergunta

  • Olá, tem como alterar o arquivo app.config via codigo?

    Por exemplo configura a string de conexao em desenvolvimento, mas quando chegar na base real o nome do servidor e dos usuarios serao outros alem do que uns saem outros entram preciso alterar a string de maneria seguinte:

    Caso a conexao falhe pelo nome do servidor naum existir coloco uma tela para o usuario informar o nome da base:
    Testo pra saber se o nome existe
    e Gravo no app.config para naum mais precisar pegar ate q um dia o usuario vai instalar novamente (o Sql Server por N motivos) e vai colocar o nome no servidor do seu time do coração e ai na primira entra novamente vou pedir pra que informe o nome do glorioso(servidor).

    Obrigado desde ja.

    sexta-feira, 19 de fevereiro de 2010 15:55

Respostas

  • Ola, Clodoaldo
    Bom abaixo estou mostrando um arquivo app.conf que eu so sempre:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <appSettings>
      <add key="caminhobanco" value="C:\Projetos\DotNet\SisCop\Database\" />
      <add key="caminhoreport" value="C:\Projetos\DotNet\SisCop\SisCop\Relatorios\"/>
      <add key="logoreport" value="file:C:\Projetos\DotNet\SisCop\SisCop\Imagens\"/>
      </appSettings>
    </configuration>

    Onde:
    Chave => caminhobanco (KEY)
    Valor da Chace = C:\Projetos\DotNet\SisCop\Database\ (VALUE)

    Agora esse que vc passou agora me pegou viu o que vc pode tentar fazer é o seguinte:
    Digamos que o conteudo da palavrana NAME seria sua chave e o conteudo da palavra connectionString seria seu value pode tentar fazer isso pode ser que de certo, lembrando que é um "chute" isso rsss

    Blza qualquer coisa estamos ai

    Junior
    domingo, 21 de fevereiro de 2010 12:04
  • Ola

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="StrCone"
                connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"
                providerName="System.Data.SqlClient" />
        </connectionStrings>
    </configuration>


    Confesso naum saber onde ta a chave ai... ou melhor quem é chave

    Naquele código que te passei, vc só coloca StrCone que é o nome de sua string de conexão.
    Pode executar aquele código q vai funcionar, ele só nao vai mudar o app.config do seu projeto, pois ele é copiado para o diretorio Debug quando vc roda seu projeto, ai a mudança ocorre dentro daquele diretorio.

    Se sua pergunta foi respondida por favor marque a resposta como certa.
    domingo, 21 de fevereiro de 2010 13:33

Todas as Respostas

  • Aqui tem um post explicando isto.
    Vc utiliza para isto a classe System.Configuration.

    http://chiragrdarji.wordpress.com/2008/09/25/how-to-change-appconfig-file-run-time-using-c/
    Se sua pergunta foi respondida por favor marque a resposta como certa.
    • Sugerido como Resposta wallybh sábado, 20 de fevereiro de 2010 12:56
    sexta-feira, 19 de fevereiro de 2010 19:39
  • Ai Dan, executei la mas naum entendi e nada aconteceu lá naum explica nada
    sábado, 20 de fevereiro de 2010 09:51
  • eu quero alterar esta linha

     

     

    connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"

    sábado, 20 de fevereiro de 2010 09:53
  • Tenta assim:


                System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
                config.ConnectionStrings.ConnectionStrings["minhaStringdeConexao"].ConnectionString = "Data Source=.\\Novo local;Initial Catalog=BasedeTeste;Integrated Security=True";

                config.Save(System.Configuration.ConfigurationSaveMode.Modified);
                System.Configuration.ConfigurationManager.RefreshSection("appSettings");


    Vc deve usar a classe System.Configuration.Configuration para modificar as chaves e valores do app.config

    Se sua pergunta foi respondida por favor marque a resposta como certa.
    • Sugerido como Resposta wallybh sábado, 20 de fevereiro de 2010 12:56
    sábado, 20 de fevereiro de 2010 11:43
  • Ishiii

    Object reference not set to an instance of an object.

    config.ConnectionStrings.ConnectionStrings["minhaStringdeConexao"].ConnectionString = "Data Source=.\\Novo local;Initial Catalog=BasedeTeste;Integrated Security=True"; // deu esse erro aqui

    Esse é o meu arquivo app.config

    <?

     

    xml version="1.0" encoding="utf-8" ?>

    <

     

    configuration>

    <

     

    configSections>

    </

     

    configSections>

    <

     

    connectionStrings>

    <

     

    add name="Controles_Testes.Properties.Settings.BasedeTesteConnectionString"

     

     

    connectionString="Data Source=CLODOALDO\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"

     

     

    providerName="System.Data.SqlClient" />

    </

     

    connectionStrings>

    </

    configuration>

       Naum sei onde errando

     

    configuration>

       Naum sei onde errando

    configuration>

       Naum sei onde errando

     

     

    sábado, 20 de fevereiro de 2010 12:11
  • Olá Clodoaldo,

    no código do app.config que vc passou a sua connection string está com o seguinte nome: 

    <add  name="Controles_Testes.Properties.Settings.BasedeTesteConnectionString"

    O erro foi por causa desse nome. Vc tem q colocar o nome da connection String corretamente no método em que você altera o seu valor.

    Ficaria assim:

    config.ConnectionStrings.ConnectionStrings["Controles_Testes.Properties.Settings.BasedeTesteConnectionString"].ConnectionString = "Data Source=.\\Novo local;Initial Catalog=BasedeTeste;Integrated Security=True"; 

    Sugiro que troque esse nome, está muito grande e pode dificultar um pouco as coisas futuramente.
    sábado, 20 de fevereiro de 2010 12:53
  • Mais uma vez sem sucesso, acho que eu to marcando em algo simples, alterei o nome fiz como meu amigo Dan ensinou mas quando volto em modo de desing e abro dentro do VS2008 o app.config ele permanece inalterado ou seja como se os comandos
                config.Save(System.Configuration.ConfigurationSaveMode.Modified);
                System.Configuration.ConfigurationManager.RefreshSection("appSettings");
    nao tivessem efeito algum sera q ta falatando alguma coisa?
    sábado, 20 de fevereiro de 2010 13:07
  • Clodoaldo,

    provavelmente está funcionando sim. Acontece que quando vc compila sua aplicação ela é executada em outro diretório. Se vc estiver debugando o app.config alterado vai estar em {Diretório da solução}\bin\Debug ou se não estiver debugando vai estar em {Diretório da solução}\bin\Release. Acesse esse diretório e veja se o app.config foi alterado.
    sábado, 20 de fevereiro de 2010 13:38
  • Ola vc pode desenvolver em sua aplicação uma area de configurações onde vc pode alterar seu app.conf, que na minha opinião fica mais elegante e profissional, em geral eu faço o seguinte:

    Adicione em uma classe por exemplo ess biblioteca
    using System.Configuration;

    Eu criei dois metodos um para gravar no App.Conf e outra para ler o arquivo

     

    public static void GravarConfiguracao(string chave, string valor)
    {
    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    config.AppSettings.Settings.Remove(chave);
    config.Save();
    config.AppSettings.Settings.Add(chave, valor);
    config.Save();
    }

     

    public static string LerConfiguracao(string chave)
    {
    return System.Configuration.ConfigurationManager.AppSettings[chave].ToString();
    }

    Dentro da minha aplicação eu crio um form que utilizo para ler e gravar dados no arquivo app.conf como por exemplo caminho de imagens, caminho de relatorios, geração de arquivos, configurações do Banco de Dados (sempre criptografo a senha para usar nos arquivos app.conf)

    E no form de login do sistema sempre faço um tratamento de erro pois se o sistema não encontrar o Banco de Dados eu mostro um aviso ao usuario e em seguida abro um form de configuração onde passo as configurações do Banco de Dados e gravo no arquivo app.conf apos gravar as informações no arquivo app.conf o usuario abre o sistema novamente e o acesso ao Banco de Dados ja estará configurado.

    Dessa forma fica um esquema bem profissional e organizado lebrando sempre que ao gravar dados de senha no app.conf eu sempre criptografo a senha no arquivo.

    Espero ter ajudado

    Abs.


    Junior
    sábado, 20 de fevereiro de 2010 14:29
  • Ola

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="StrCone"
                connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"
                providerName="System.Data.SqlClient" />
        </connectionStrings>
    </configuration>


    Confesso naum saber onde ta a chave ai... ou melhor quem é chave
    sábado, 20 de fevereiro de 2010 18:01
  • Ola, Clodoaldo
    Bom abaixo estou mostrando um arquivo app.conf que eu so sempre:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <appSettings>
      <add key="caminhobanco" value="C:\Projetos\DotNet\SisCop\Database\" />
      <add key="caminhoreport" value="C:\Projetos\DotNet\SisCop\SisCop\Relatorios\"/>
      <add key="logoreport" value="file:C:\Projetos\DotNet\SisCop\SisCop\Imagens\"/>
      </appSettings>
    </configuration>

    Onde:
    Chave => caminhobanco (KEY)
    Valor da Chace = C:\Projetos\DotNet\SisCop\Database\ (VALUE)

    Agora esse que vc passou agora me pegou viu o que vc pode tentar fazer é o seguinte:
    Digamos que o conteudo da palavrana NAME seria sua chave e o conteudo da palavra connectionString seria seu value pode tentar fazer isso pode ser que de certo, lembrando que é um "chute" isso rsss

    Blza qualquer coisa estamos ai

    Junior
    domingo, 21 de fevereiro de 2010 12:04
  • Ola

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="StrCone"
                connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"
                providerName="System.Data.SqlClient" />
        </connectionStrings>
    </configuration>


    Confesso naum saber onde ta a chave ai... ou melhor quem é chave

    Naquele código que te passei, vc só coloca StrCone que é o nome de sua string de conexão.
    Pode executar aquele código q vai funcionar, ele só nao vai mudar o app.config do seu projeto, pois ele é copiado para o diretorio Debug quando vc roda seu projeto, ai a mudança ocorre dentro daquele diretorio.

    Se sua pergunta foi respondida por favor marque a resposta como certa.
    domingo, 21 de fevereiro de 2010 13:33
  • VAleu Julio , VAleu Dani....


    Só uma coisa quando do projeto copilado ele vai salvar o arquivo????

    Pois q senão vai ser um saco toda vez que o usuario entrar e ter que informar o nome do servidor e o banco de dados o usuario vai atirar o monitor pela janela e chamar este aqui de BURRO né.

      Eu preciso que o procedimento salve o arquivo para q na proxima entrada o usuario informe apenas a senha dele


     Muito Obrigado pela ajuda ate aqui
    domingo, 21 de fevereiro de 2010 20:41
  • VAleu Julio , VAleu Dani....


    Só uma coisa quando do projeto copilado ele vai salvar o arquivo????

    Pois q senão vai ser um saco toda vez que o usuario entrar e ter que informar o nome do servidor e o banco de dados o usuario vai atirar o monitor pela janela e chamar este aqui de BURRO né.

      Eu preciso que o procedimento salve o arquivo para q na proxima entrada o usuario informe apenas a senha dele


     Muito Obrigado pela ajuda ate aqui
    domingo, 21 de fevereiro de 2010 20:41
  • Ola

    Só por questões de entendimento pois para mim não ficou claro sobre a questão de gravar os dados do arquivo app.conf.

    Bom primeiro quando se desenvolve uma rotina desse tipo tem-se que ja fazer todo o esquema de gravação dentro do arquivo para que na proxima entrada no sistema este ja esteja todo configurado. Isso é uma questão importantissima pois como foi dito o usuario ficaria doido com isso.
    Ate no post acima onde enviei um codigo onde se faz a leitura e gravação do arquivo ja é para suprir esse problema então se tem leitura e gravação no arquivo, outro ponto senhas lembrar de criptografa-las isso é importantissimo e mais um ponto desenvolver uma interface amigavel e de facil utilização pelo usuario na configuração de acesso ao sistema ou melhor uma interface onde com algum suporte do desenvolvedor o usuario final possa fazer a configuração necessário para o sistema funcionar.

    Quando cito a interface amigavel digo uma tela de facil uso e todo o tratamento de erro dentro do form de entrada para que este de acordo com erro guie o usuario até uma area de configuração.

    Quando o projeto é compilado o sistema usa o arquivo app.conf que fica dentro do diretorio BIN do projeto.

    Abs.
    Junior
    domingo, 21 de fevereiro de 2010 22:52