Domanda

Ho una classe come questa:

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

Quando provo ad usarlo in questo modo:

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

Ricevo un errore: " System.Reflection.TargetInvocationException: l'eccezione è stata generata dalla destinazione di una chiamata. --- gt &; System.NullReferenceException: riferimento all'oggetto non impostato su un'istanza di un oggetto. & Quot; La proprietà AllKeys per AppSettings è un array di lunghezza zero in cui mi aspetto una lunghezza di 1.

Il mio file app.config nel progetto è simile al seguente:

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

So che ConfigurationSettings.AppSettings dovrebbe essere obsoleto e dovrei usare ConfigurationManager.AppSettings, ma non riesco nemmeno a farlo compilare. Ho un riferimento nel progetto a System.configuration (c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll sulla mia macchina) e usando l'istruzione nella parte superiore del mio codice.

Sto usando Fitnesse per testare il codice, ed è allora che ottengo l'errore. Comprendo che dovrei anche inserire una copia del file app.config nella cartella Bin & Gt; Debug del progetto di dispositivi di test che ho eseguito. Quindi, non so perché visualizzo ancora questo errore.

Per favore, aiuto.

È stato utile?

Soluzione

Quando si esegue il test con FitNesse, l'eseguibile effettivo in esecuzione è " FitServer.exe " quindi AppSettings sta cercando un " FitServer.exe.config " nella directory con vite FitServer.exe. Quindi una soluzione rapida e sporca è copiare lì la tua app.config e rinominarla.

Una soluzione migliore è specificare la configurazione dell'app come descritto qui:   http://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html

o se stai usando fitSharp (che è un miglioramento di FitNesse.NET):   http://www.syterra.com/Fit/AppConfigFiles.html

Altri suggerimenti

Inoltre: prova a utilizzare la classe ConfigurationManager anziché " ConfigurationSettings " ;:

Utilizza prima un segno di spunta per NOT NULL:

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

È all'interno di un assembly della libreria di classi? Quelli non usano mai la propria app.config, ma invece usano l'app.config dell'app host (l'app che usa la libreria di classi).

Marc

Non inserirlo nelle impostazioni delle app. Usa & Lt; connectionStrings & Gt;

Esempio:

lt &; AppSettings / gt &;

lt &; & ConnectionStrings gt;     < aggiungi nome = " NORTHWNDConnectionString " connectionString = " Origine dati =. \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ NORTHWND.MDF; Sicurezza integrata = True; Istanza utente = True " providerName = quot &; System.Data.SqlClient quot &; / gt &;

lt &; / ConnectionStrings gt &;

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top