Pregunta

Tengo una clase como esta:

public class RxNormFolderMgr
{
    // properties
    public string RxNormFolder { get { return ConfigurationSettings.AppSettings["rootFolder"].ToString(); } }
}

Cuando trato de usarlo así:

public class TestRxNormFolderManager : ColumnFixture
{
    public string RxNormFolder()
    {
        RxNormFolderMgr folderMgr = new RxNormFolderMgr();
        return folderMgr.RxNormFolder;
    }
}

Me sale un error: " System.Reflection.TargetInvocationException: el destino de una invocación ha lanzado una excepción. --- > System.NullReferenceException: referencia de objeto no establecida en una instancia de un objeto. & Quot; La propiedad AllKeys para AppSettings es una matriz de longitud cero donde espero una longitud de 1.

Mi archivo app.config en el proyecto se ve así:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="rootFolder" value ="C:\RxNorm" />
        <!-- Root folder must not end with slash. -->
    </appSettings>
</configuration>

Sé que ConfigurationSettings.AppSettings se supone que está obsoleto y debería usar ConfigurationManager.AppSettings, pero ni siquiera puedo hacer que se compile. Tengo una referencia en el proyecto a System.configuration (c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll en mi máquina) y uso de la declaración en la parte superior de mi código.

Estoy usando Fitnesse para probar el código, y ahí es cuando recibo el error. Tengo entendido que también debería colocar una copia del archivo app.config en la carpeta Bin & Gt; Debug del proyecto de accesorios de prueba que he hecho. Entonces, no sé por qué sigo recibiendo este error.

Por favor, ayuda.

¿Fue útil?

Solución

Cuando está probando con FitNesse, el ejecutable real en ejecución es " FitServer.exe " entonces AppSettings está buscando un " FitServer.exe.config " en el directorio con FitServer.exe vive. Entonces, una solución rápida y sucia es copiar su app.config allí y cambiarle el nombre.

Una mejor solución es especificar la configuración de la aplicación como se describe aquí:   http://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html

o si está utilizando fitSharp (que es una mejora de FitNesse.NET):   http://www.syterra.com/Fit/AppConfigFiles.html

Otros consejos

También: intente usar la clase ConfigurationManager en lugar de " ConfigurationSettings " ;:

Use un cheque para NOT NULL primero:

public class RxNormFolderMgr
{
    // properties
    public string RxNormFolder 
    { 
       get
       { 
           if(ConfigurationManager.AppSettings["rootFolder"] != null)
           {
               return ConfigurationManager.AppSettings["rootFolder"].ToString(); 
           }
           return string.Empty;
       }
    }
}

¿Está esto dentro de un ensamblaje de biblioteca de clases? Esos nunca usan su propia app.config, sino que usan la app.config de la aplicación host (la aplicación que usa la biblioteca de clases).

Marc

No lo ponga en la configuración de la aplicación. Use & Lt; connectionStrings & Gt;

ejemplo:

< appSettings / >

< connectionStrings >     < add name = " NORTHWNDConnectionString " connectionString = " Fuente de datos =. \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ NORTHWND.MDF; Seguridad integrada = True; Instancia del usuario = True " providerName = " System.Data.SqlClient " / >

< / connectionStrings >

string cnstr = ConfigurationManager.ConnectionStrings [" NORTHWNDConnectionString "]. ToString ();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top