Beim Ausführen von Komponententests wird durch Aufrufen einer beliebigen Methode in der DLL der tragbaren Laufzeitbibliothek, die auf "System.Reflection.TypeExtensions" verweist, eine FileNotFound-Ausnahme generiert, die nach "System.Reflection.TypeExtensions" sucht. Der Fehler tritt nicht auf, wenn derselbe Code in einer Windows 10 Universal App ausgeführt wird.
Das Projekt ist eine C # -Portable-Laufzeitbibliothek, die für die Unterstützung von .net Framework 4.6 und Windows Universal 10.0 konfiguriert ist. Das Testprojekt ist für die Verwendung von .net Framework 4.6 konfiguriert.
Wenn ich versuche, eine Methode aufzurufen, die den Typ System.Reflection.BindingFlags verwendet, erhalte ich die folgende Ausnahme. Die Ausnahme tritt auf, wenn der Aufruf beginnt (vermutlich während der Ausführung der Funktion).
%Vor%Das Hinzufügen dieser Pakete ist das Richtige. Hier ist, warum Sie dieses Verhalten sehen:
BindingFlags
wird derzeit [1] in System.Reflection.TypeExtensions
. System.Reflection.TypeExtensions!System.Reflection.BindingFlags
. System.Reflection.TypeExtensions
hinzufügen, andernfalls kann der Compiler den Typ nicht auflösen. Dasselbe gilt für ein Unit-Test-Projekt, das den gesamten Code bereitstellen muss, um ausgeführt zu werden. mscorlib!System.Reflection.BindingFlags
verweist, und den Code gerne ausführen. Als allgemeine Faustregel gilt: .NET Core wurde entwickelt, um das Framework auf App-lokale Weise bereitzustellen, dh wenn Ihre Anwendung in einem Ordner bereitgestellt wird, müssen auch alle Ihre Abhängigkeiten geschlossen werden . Obwohl Komponententest-Projekte konzeptionell Klassenbibliotheken sind, gilt das Gleiche, weil sie wie Anwendungen ausgeführt werden.
Natürlich erwarten wir nicht, dass Leute die Referenzen manuell optimieren und Abhängigkeiten aufspüren. Was Sie derzeit sehen, sind Vorabtrennungs-Bits, bei denen nicht alle Teile unserer Werkzeug-Erfahrungen das Richtige tun.
Zwei Fragen von meiner Seite:
Welches Einheitentestframework verwenden Sie? Ich nehme an, es ist MSTest (Microsoft.VisualStudio.TestTools.UnitTesting), im Gegensatz zu XUnit oder NUnit?
Welchen Läufer benutzen Sie? Ich nehme an, es ist der eingebaute Visual Studio Test Explorer (im Gegensatz zu ReSharper oder TestDriven.NET)?
[1] Ich sage derzeit, weil wir uns aufgrund von Kunden-Feedback entschieden haben um es zurück in System.Reflection
zu verschieben, zusammen mit den APIs, die BindingFlags
übernehmen.
Tags und Links .net c# visual-studio-2015 portable-class-library