Frage

Ich habe eine Klasse wie folgt:

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

Wenn ich versuche, es so zu verwenden:

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

Ich erhalte eine Fehlermeldung: „System.Reflection.TargetInvocationException: Ausnahme wurde durch das Ziel für einen Aufruf ausgelöst worden ---> System.NullReferenceException:. Objektverweis nicht auf eine Instanz eines Objekts festgelegt.“ Die AllKeys Eigenschaft für AppSettings ist ein Array mit der Länge Null, wo ich erwarte Länge von 1.

Meine app.config-Datei im Projekt sieht wie folgt aus:

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

Ich weiß ConfigurationSettings.AppSettings soll veraltet sein und ich sollte ConfigurationManager.AppSettings verwenden, aber ich kann nicht einmal das zu kompilieren. Ich habe eine Referenz im Projekt System.Configuration (c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Configuration.dll auf meinem Rechner) und Erklärung oben meinen Codes mit

.

Ich Fitnesse bin mit dem Code zu testen, und das ist, wenn ich den Fehler. Es ist mein Verständnis, dass ich auch eine Kopie der Datei app.config im Bin> Debug-Ordnern des Prüfvorrichtungen Projektes werden kann, die ich getan habe. Also, ich weiß nicht, warum ich immer noch diesen Fehler bin immer.

Bitte, Hilfe.

War es hilfreich?

Lösung

Wenn Sie mit FitNesse testen, der tatsächliche ausführbare Lauf ist „FitServer.exe“ so AppSettings ist für ein „FitServer.exe.config“ im Verzeichnis mit FitServer.exe lebt. So eine schnelle und schmutzige Lösung ist Ihre app.config es zu kopieren und umbenennen.

Eine bessere Lösung ist es, die App config angeben, wie hier beschrieben:   http://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html

oder wenn Sie mit fitSharp (die eine Erweiterung von FitNesse.NET ist):   http://www.syterra.com/Fit/AppConfigFiles.html

Andere Tipps

auch: versuchen, die mit ConfigurationManager Klasse statt "Configuration":

einen Scheck für NOT NULL verwendet zuerst:

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

Ist dies innerhalb einer Klassenbibliothek Montage? Diejenigen, nie ihre eigenen app.config verwenden -. Sondern nutzen die app.config des Host-App (die Anwendung, die die Klassenbibliothek verwendet)

Marc

Stellen Sie es nicht in appsettings. Mit

Beispiel:

    

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top