Die Assembly kann beim Verweisen auf BindingFlags in der Windows 10 Universal Windows-Bibliothek nicht geladen werden

8

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%     
Robin Davies 06.02.2016, 20:19
quelle

2 Antworten

2

Das Hinzufügen dieser Pakete ist das Richtige. Hier ist, warum Sie dieses Verhalten sehen:

  1. BindingFlags wird derzeit [1] in System.Reflection.TypeExtensions .
  2. verfügbar gemacht
  3. Wenn Sie eine .NET Core-Klassenbibliothek kompilieren, zeichnet der Compiler den Typverweis als System.Reflection.TypeExtensions!System.Reflection.BindingFlags .
  4. auf
  5. Wenn Sie die Klassenbibliothek von einer .NET Framework-Anwendung aus konsumieren, müssen Sie einen Verweis auf 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.
  6. Zur Laufzeit wird die CLR den Typ auflösen, einen Type forward finden, der auf 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:

  1. Welches Einheitentestframework verwenden Sie? Ich nehme an, es ist MSTest (Microsoft.VisualStudio.TestTools.UnitTesting), im Gegensatz zu XUnit oder NUnit?

  2. 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.

    
Immo Landwerth 11.03.2016, 19:18
quelle
4

Verweis auf nuget-Pakete hinzufügen:

%Vor%     
eschneider 11.03.2016 04:53
quelle