ConfigurationSettings.AppSettings leer ist, wirft null Ausnahme
-
05-07-2019 - |
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.
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 ();.