ConfigurationSettings.AppSettings está vazia, lança excepção nulo
-
05-07-2019 - |
Pergunta
Eu tenho uma classe como esta:
public class RxNormFolderMgr
{
// properties
public string RxNormFolder { get { return ConfigurationSettings.AppSettings["rootFolder"].ToString(); } }
}
Quando tento usá-lo como este:
public class TestRxNormFolderManager : ColumnFixture
{
public string RxNormFolder()
{
RxNormFolderMgr folderMgr = new RxNormFolderMgr();
return folderMgr.RxNormFolder;
}
}
Eu recebo um erro: "System.Reflection.TargetInvocationException:. Exceção foi acionada pelo destino de uma chamada ---> System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto." O AllKeys propriedade para AppSettings é uma matriz de comprimento zero onde estou esperando comprimento de 1.
Meu arquivo app.config nos olhares projeto como este:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="rootFolder" value ="C:\RxNorm" />
<!-- Root folder must not end with slash. -->
</appSettings>
</configuration>
Eu sei ConfigurationSettings.AppSettings é suposto ser obsoleta e que eu deveria usar ConfigurationManager.AppSettings, mas eu não posso mesmo começar que para compilar. Eu tenho uma referência no projeto para System.Configuration (c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Configuration.dll na minha máquina). E usando declaração no topo do meu código
Eu estou usando Fitnesse para testar o código, e é aí que eu recebo o erro. É meu entendimento que eu também deve colocar uma cópia do arquivo app.config na pasta Bin> Debug do projecto dispositivos de teste que eu fiz. Então, eu não sei por que estou recebendo este erro ainda.
Por favor, ajuda.
Solução
Quando você está testando com FitNesse, a execução executável real é "FitServer.exe" para AppSettings está à procura de um "FitServer.exe.config" no diretório com vidas FitServer.exe. Então uma solução rápida e suja é copiar o seu app.config lá e renomeá-lo.
Uma solução melhor é para especificar a configuração do aplicativo, conforme descrito aqui: http://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html
ou se você estiver usando fitSharp (que é um aprimoramento do FitNesse.NET): http://www.syterra.com/Fit/AppConfigFiles.html
Outras dicas
Também: tente usar o ConfigurationManager
classe em vez de "ConfigurationSettings":
Use um cheque de NOT NULL em primeiro lugar:
public class RxNormFolderMgr
{
// properties
public string RxNormFolder
{
get
{
if(ConfigurationManager.AppSettings["rootFolder"] != null)
{
return ConfigurationManager.AppSettings["rootFolder"].ToString();
}
return string.Empty;
}
}
}
É este dentro de uma biblioteca de classes de montagem? Aqueles nunca use seu próprio app.config -. Mas em vez disso o uso app.config do aplicativo host (o aplicativo que usa a biblioteca de classes)
Marc
Não colocá-lo em appsettings. Use
exemplo:
string cnstr = ConfigurationManager.ConnectionStrings [ "NORTHWNDConnectionString"] toString ();.