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.

Foi útil?

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 ();.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top