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).
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?
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
.
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!
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.
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.
Estou a usar isto e funciona bem para mim
textBox1.Text = ConfigurationManager.AppSettings["Name"];
Deve adicionar ao projecto uma referência ao sistema.Montagem de configuração.
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
Leia Da Configuração:
Tens de adicionar uma referência à configuração
- Abra "Propriedades" no seu projecto
- vá para a página "Configuração"
- Adicionar "nome " e"valor"
-
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();
System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
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>
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"]
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.
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
}
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>();
<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
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.
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.
Outra solução possível:
var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
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
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