Question

J'ai une classe comme celle-ci:

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

Quand j'essaie de l'utiliser comme ceci:

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

Je reçois une erreur: & "System.Reflection.TargetInvocationException: une exception a été levée par la cible d'un appel. --- > System.NullReferenceException: la référence d'objet n'est pas définie sur une instance d'objet. & Quot; La propriété AllKeys pour AppSettings est un tableau de longueur nulle où je m'attends à une longueur de 1.

Mon fichier app.config dans le projet se présente comme suit:

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

Je sais que ConfigurationSettings.AppSettings est censé être obsolète et que je devrais utiliser ConfigurationManager.AppSettings, mais je ne parviens même pas à le compiler. J'ai dans le projet une référence à System.configuration (c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll sur ma machine) et à l'utilisation de l'instruction en haut de mon code.

J'utilise Fitnesse pour tester le code, et c'est à ce moment-là que j'obtiens l'erreur. Si j'ai bien compris, je devrais également placer une copie du fichier app.config dans le dossier Bin & Gt; Debug du projet de fixtures de test que j'ai déjà créé. Donc, je ne sais pas pourquoi je reçois encore cette erreur.

S'il vous plaît, aidez-nous.

Était-ce utile?

La solution

Lorsque vous testez avec FitNesse, l'exécutable en cours d'exécution est " FitServer.exe " donc AppSettings recherche un " FitServer.exe.config " dans le répertoire avec FitServer.exe vit. Une solution simple et rapide consiste donc à copier votre application.config et à la renommer.

Une meilleure solution consiste à spécifier la configuration de l'application comme décrit ici:   http://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html

ou si vous utilisez fitSharp (qui est une amélioration de FitNesse.NET):   http://www.syterra.com/Fit/AppConfigFiles.html

Autres conseils

En outre: , essayez d'utiliser la classe ConfigurationManager au lieu de & "ConfigurationSettings &":

.

Commencez par utiliser une vérification pour NOT NULL:

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

Est-ce à l'intérieur d'un assemblage de bibliothèque de classes? Ceux-ci n'utilisent jamais leur propre app.config - mais utilisent l'app.config de l'application hôte (l'application qui utilise la bibliothèque de classes).

Marc

Ne le mettez pas dans les appsettings. Utilisez & Lt; connectionStrings & Gt;

exemple:

< appSettings / >

< connectionStrings >     < add name = & "NORTHWNDConnectionString &"; connectionString = " Source de données =. \ SQLEXPRESS; AttachDbFilename = | Répertoire de données | \ NORTHWND.MDF; Sécurité intégrée = True; Instance utilisateur = True " providerName = & "System.Data.SqlClient &" / >

< / connectionStrings >

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top