Ich versuche, diesen Ausnahmebehandler zu beenden:
if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null)
{
string pathOfActiveConfigFile = ...?
throw new ConfigurationErrorsException(
"You either forgot to set the connection string, or " +
"you're using a unit test framework that looks for "+
"the config file in strange places, update this file : "
+ pathOfActiveConfigFile);
}
Dieses Problem scheint mir nur zu passieren, wenn ich nUnit verwende.
c#
.net
nunit
app-config
configurationmanager
MatthewMartin
quelle
quelle
Genau genommen gibt es keine einzige Konfigurationsdatei. Mit Ausnahme von ASP.NET 1 können mithilfe der
System.Configuration
Unterstützung von inbuilt ( ) drei Konfigurationsdateien vorhanden sein . Zusätzlich zur Computerkonfiguration :app.exe.config
, Benutzerroaming und Benutzerlokal.So erhalten Sie die "globale" Konfiguration ( exe .config):
Verwenden Sie unterschiedliche
ConfigurationUserLevel
Werte für Roaming- und Nicht-Roaming-Konfigurationsdateien pro Verwendung.1 Das Modell hat ein völlig anderes Modell, bei dem der Inhalt eines untergeordneten Ordners (IIS-virtuell oder Dateisystem)
web.config
(abhängig von der Einstellung) dem des übergeordneten Ordners hinzugefügt oder diesen überschreiben kannweb.config
.quelle
Wenn Sie meinen, dass Sie nur dann eine Null-Rückgabe erhalten, wenn Sie NUnit verwenden, müssen Sie wahrscheinlich den ConnectionString-Wert Ihrer app.config Ihrer Anwendung in die app.config Ihrer Testbibliothek kopieren.
Wenn es vom Testloader ausgeführt wird, wird die Testassembly zur Laufzeit geladen und in ihrer eigenen app.config (zur Kompilierungszeit in testAssembly.dll.config umbenannt) und nicht in Ihrer Anwendungskonfigurationsdatei angezeigt.
Versuchen Sie es, um den Speicherort der Baugruppe zu ermitteln, die Sie ausführen
quelle
Stellen Sie sicher, dass Sie auf die Eigenschaften der Datei klicken und sie auf "Immer kopieren" setzen. Andernfalls befindet sie sich nicht im Ordner "Debug \" mit Ihren Happy Lil DLLs, um zu konfigurieren, wo sie sein muss, und fügen Sie weitere Cowbell hinzu
quelle
Als ich zum ersten Mal feststellte, dass das Unit-Test-Projekt auf die app.config in diesem Projekt und nicht auf die app.config verweist, die meinem Produktionscode-Projekt zugeordnet ist (natürlich DOH), habe ich gerade eine Zeile im Post-Build-Ereignis des Prod-Projekts hinzugefügt Dadurch wird die Datei app.config in den Ordner bin des Testprojekts kopiert.
Problem gelöst
Ich habe bisher keine seltsamen Nebenwirkungen bemerkt, bin mir aber nicht sicher, ob dies die richtige Lösung ist, aber zumindest scheint es zu funktionieren.
quelle
Eine weitere Option, die ich gesehen habe, fehlt hier:
quelle
Abhängig vom Speicherort Ihrer Konfigurationsdatei können Sie
System.Reflection.Assembly.GetExecutingAssembly().Location
möglicherweise das tun, was Sie benötigen.quelle
Ich habe eine der vorherigen Antworten in einer Webanwendung ausprobiert (eigentlich eine Azure-Webrolle, die lokal ausgeführt wird), und es hat nicht ganz funktioniert. Dieser ähnliche Ansatz hat jedoch funktioniert:
Die Konfigurationsdatei befand sich in C: \ Programme \ IIS Express \ MyComponent.dll.config. Interessanter Ort dafür.
quelle