A ler a configuração da aplicação.config ou web.configuração in.net

estou a trabalhar numa biblioteca de Classe C# que precisa de ser capaz de ler as configurações do ficheiro {[[2]} ou app.config (dependendo se o DLL é referenciado a partir de um ASP.NET aplicação web ou uma aplicação Windows Forms).

Descobri que ...
ConfigurationSettings.AppSettings.Get("MySetting")

funciona, mas esse código foi marcado como obsoleto pela Microsoft.

Li que devia usar:
ConfigurationManager.AppSettings["MySetting"]
No entanto, a classe System.Configuration.ConfigurationManager não parece estar disponível numa biblioteca de Classe C# projecto.

Alguém sabe qual é a melhor maneira de fazer isto?

Author: Shamim Hafiz, 2009-07-27

20 answers

Terá de adicionar uma referência a System.Configuration na pasta de referências do seu projecto .

Deves definitivamente estar a usar o ConfigurationManager sobre o obsoleto ConfigurationSettings.

 667
Author: womp, 2015-06-02 18:25:08

Para Aplicação De Amostras.configuração como em baixo:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

Leu a configuração das aplicações acima usando o código mostrado abaixo:

using System.Configuration;

Também pode ser necessário adicionar uma referência ao sistema.Configuração no seu projecto, se já não existir. Você pode então acessar os valores assim:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];
Espero que isto ajude!
 696
Author: Rama, 2014-06-27 09:18:50

Actualização dos quadros 4.5 e 4.6; o seguinte deixará de funcionar:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

Agora aceda à classe de configuração através das propriedades:

string keyvalue= Properties.Settings.Default.keyname;

Ver gerir a configuração das aplicações para mais informações.

 56
Author: bsivel, 2015-11-09 17:51:08

Carregue com o botão direito na sua biblioteca de classes e escolha a opção "Adicionar referências" do Menu; e, finalmente, na página.net, seleccione o sistema.Configuracao. Isso incluiria o sistema.DLL de configuração no seu projecto.

 35
Author: Shiva, 2009-07-27 17:51:10

Estou a usar isto e funciona bem para mim

textBox1.Text = ConfigurationManager.AppSettings["Name"];
 28
Author: Pagey, 2011-11-30 23:24:05

Deve adicionar ao projecto uma referência ao sistema.Montagem de configuração.

 20
Author: Otávio Décio, 2017-08-11 08:56:47

Podes estar a adicionar a aplicação.ficheiro de configuração para um DLL. Aplicacao.A configuração funciona apenas para projectos executáveis, uma vez que todo o dll retira a configuração do ficheiro de configuração para o exe a ser executado.

Digamos que tem dois projectos na sua solução:
  • SomeDll
  • SomeExe
O teu problema pode ser relegado para o facto de estares a incluir a aplicação.config para alguém e não para alguém. SomeDll é capaz de ler a configuração do SomeExe projecto.
 14
Author: Victor Naranjo, 2013-06-12 18:59:47

Leia Da Configuração:

Tens de adicionar uma referência à configuração

  1. Abra "Propriedades" no seu projecto
  2. vá para a página "Configuração"
  3. Adicionar "nome " e"valor"
  4. Obter o valor usando o seguinte código:

    Valor do texto = propriedades.Definicao.Padrao.keyname;

Gravar na configuração:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();
 14
Author: Masoud Siahkali, 2016-08-07 12:29:46
Tive o mesmo problema, lê-os assim:
System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
 7
Author: Tom, 2014-01-03 09:39:29

Tenta isto:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];
Na web.a configuração deve ser a seguinte estrutura:
<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
 7
Author: Ruslan, 2014-11-16 06:12:56

web.config é usado com aplicações web.web.config por omissão tem várias configurações necessárias para a aplicação web. Você pode ter um web.config para cada pasta sob a sua aplicação web.

app.config é usado para aplicações windows. Quando você constrói a aplicação em vs.net, ele será automaticamente renomeado para <appname>.exe.config e este arquivo tem que ser entregue junto com a sua aplicação.

Você pode usar o mesmo método para chamar os valores app settings de ambos os ficheiros de configuração:

System.Configuration.ConfigurationSettings.AppSettings["Key"]
 5
Author: Wavare Santosh, 2018-06-28 09:31:35
Recomendo vivamente que crie um invólucro para esta chamada. Algo como uma injecção de dependência para ter esta aula. Desta forma você será capaz de isolar estes arquivos de configuração para fins de teste.

Então use o ConfigurationManager.AppSettings["something"]; sugerido e devolva este valor. Você pode com este método criar algum tipo de retorno padrão se não houver nenhuma chave Disponível em .ficheiro de configuração.

 3
Author: Custodio, 2012-10-18 19:19:11

Como eu encontrei a melhor abordagem para acessar as variáveis de configuração de app de forma sistemática, fazendo uma classe wrapper sobre o sistema.Configuração abaixo

public class BaseConfiguration
    {
        protected static object GetAppSetting(Type expectedType, string key)
        {
            string value = ConfigurationManager.AppSettings.Get(key);
            try
            {
                if (expectedType == typeof(int))
                    return int.Parse(value);
                if (expectedType == typeof(string))
                    return value;

                throw new Exception("Type not supported.");
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
                    key, expectedType), ex);
            }
        }
    }

Agora podemos aceder às variáveis de configuração necessárias por nomes codificados usando outra classe como em baixo

public class ConfigurationSettings:BaseConfiguration
    {
        #region App setting

        public static string ApplicationName
        {
            get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
        }

        public static string MailBccAddress
        {
            get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
        }

        public static string DefaultConnection
        {
            get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
        }

        #endregion App setting

        #region global setting



        #endregion global setting
    }
 3
Author: Ashwini Jindal, 2016-10-14 06:33:11

Também pode utilizar formato:

Configuração:

<appSettings>
    <add key="RetryAttempts" value="5" />
    <add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>

Código:

dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts;                 // returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10);             // returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10);  // returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();
 2
Author: pomber, 2015-05-18 20:58:46
Há alguns dias que tento encontrar uma solução para este mesmo problema. Eu fui capaz de resolver isso adicionando uma chave dentro da tag appsettings na web.configuracao. Isto deve anular o ... dll ao usar o ajudante.
<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
 0
Author: Jason, 2013-04-30 18:06:46

Crio sempre uma interface IConfig com propriedades typesafe declaradas para todos os valores de configuração. Uma classe de implementação de configuração, em seguida, envolve as chamadas para o sistema.Configuracao. Todo o teu sistema.Chamadas de configuração estão agora em um lugar muito mais fácil e mais limpo para manter e rastrear quais campos estão sendo usados e declarar seus valores padrão. Eu escrevo um conjunto de métodos auxiliares privados para ler e analisar tipos de dados comuns.

Usando uma estrutura de Coi pode aceder ao IConfig campos em qualquer lugar do seu aplicativo, simplesmente passando a interface para um construtor de classe. Você também é capaz de criar implementações simuladas da interface IConfig em seus testes de unidade para que você possa agora testar vários valores de configuração e combinações de valores sem precisar tocar no seu aplicativo.config ou Web.ficheiro de configuração.

 0
Author: Tony O'Hagan, 2016-01-10 23:29:07

Só para ser completo, há outra opção disponível apenas para projectos web:

System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]

O benefício disto é que não requer uma referência extra a ser adicionada, por isso pode ser preferível para algumas pessoas.

 0
Author: rdans, 2016-03-16 11:59:27

Outra solução possível:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
 0
Author: sherite, 2016-03-30 15:15:19

Pls check. net version você está trabalhando. Deve ser mais do que 4. E você tem que adicionar Sistema.Biblioteca do sistema de configuração para a sua aplicação

 0
Author: nayanajith, 2018-09-23 04:46:40

Para ex:

<applicationSettings>
        <MyApp.My.MySettings>
            <setting name="Printer" serializeAs="String">
                <value>1234 </value>
            </setting>
        </MyApp.My.MySettings>
    </applicationSettings>
Dim strPrinterName as string= My.settings.Printer
 -2
Author: JMat, 2017-01-09 23:23:55