Wir schreiben Komponententests für unsere Business-Schicht unter .NET 4.0. Die Business-Schicht ist eine einfache C# -Klassenbibliothek, die normalerweise in SOAP- und REST-Webdiensten ausgeführt wird. Unsere Anwendung verwendet log4net in einer separaten Wrapper-Assembly für die Protokollierung. Der C# -Code in der Logging-Assembly hat eine Assembly-Info-Direktive, die log4net den Namen der Konfigurationsdatei mitteilt: aaLog4net kann die Konfigurationsdatei nicht finden, wenn sie von Visual Studio/Microsoft Test Framework ausgeführt wird
[assembly: log4net.Config.XmlConfigurator (ConfigFile = "AcmeLogging.config", Watch = true) ]
Die Initialisierung von log4net über den Wrapper funktioniert in den Webdiensten einwandfrei. Wenn wir es mit unserer Komponententest-Assembly initialisieren, scheint es die Konfigurationsdatei nicht zu sehen. Die Konfigurationsdatei wird über Eigenschaften konfiguriert, die in das Ausführungsverzeichnis kopiert werden sollen, und wir sehen sie im Verzeichnis bin \ debug. Ein schnelles Konsolentestprogramm, das die Protokollierungsbaugruppe verwendet, die in demselben Ordner ausgeführt wird, funktioniert einwandfrei. Das Merkwürdige ist, dass die Verhaltensprobleme periodisch auftreten und auf verschiedenen Maschinen der Entwickler zu verschiedenen Zeiten auftauchen und nicht in irgendeiner deterministischen Weise geheilt werden können.
Beim Durchlaufen des Wrapper Assembly-Codes wird der log4netLogManager.GetLogger() - Aufruf korrekt zurückgegeben, aber die Liste der von log.Logger.Repository.GetAppenders() zurückgegebenen Appender ist leer. Da dieses inkorrekte Verhalten unabhängig davon ist, ob sich die Datei im Ordner Bin \ Debug befindet oder nicht, glauben wir, dass die Datei nicht angezeigt wird.
Alle Hinweise darauf, was wir über das Ausführen von log4net im Microsoft Test Framework vermissen, wären sehr willkommen.
Dies war _exactly_ was wir brauchten, dies wird das ganze Team sehr glücklich machen. Vielen Dank. Ich würde gerne für diese Antwort stimmen, aber nicht genug SO-Aktivitäten, um dies zu tun - aber zukünftige Leser sollten dies als zusätzliche Stimme für diese Antwort betrachten. –