webentwicklung-frage-antwort-db.com.de

VS2017 Datei oder Assembly Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll oder eine ihrer Abhängigkeiten konnte nicht geladen werden

Beim Versuch, eine ältere Lösung in VS2017 zu öffnen, gibt es ein altes Unit-Test-Projekt, das beim Erstellen ein Problem darstellt.

Beim Erstellen dieses Testprojekts erhalte ich folgende Fehlermeldung:

Datei oder Assembly-Datei konnte nicht geladen werden: /// C:\Projects\MyProj\Test\DAL\UnitTestProj\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 'oder eine ihrer Abhängigkeiten. Die angegebene Datei wurde vom System nicht gefunden.

Ich habe die Referenzen des Projekts überprüft und es scheint, dass Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll referenziert wird. Außerdem gibt es keine Codefehler. Wie könnte ich jemals herausfinden, ob es eine ihrer Abhängigkeiten ist, die es nicht finden kann?

13
Blake Rivell

Ich hatte ein ähnliches Problem (mit der zusätzlichen Nachricht The "BuildShadowTask" task failed unexpectedly) bei einem Projekt, das ursprünglich mit VS2010 entwickelt wurde, und konnte die letzten paar Stunden damit verbringen, ein weiteres Erbe des Build-Prozesses zu lernen.

Es besteht eine gute Chance, dass es sich um private Accessor-Dateien (.accessor) handelt, die in VS2012 veraltet ( ursprüngliche Quelle = 404) waren. Dies wurde in einer Ankündigung vom VS2010-Team vorweggenommen, _ dass sie nicht mehr an diesen Funktionen arbeiteten.

Es besteht auch die Möglichkeit, dass Sie sich nur mit falschen Verweisen auf die falsche Version von UnitTestFramework auseinandersetzen, aber eine NuGet-Wiederherstellung sollte dies beheben. Falls nicht, finden Sie unter dieser GitHub-Thread eine mögliche Lösung (ändern Sie den ref manuell in den öffentlichen Ordner), oder wechseln Sie zu den neuen Paketen MSTest.TestAdapter und MSTest.TestFramework (siehe MSDN-Unterstützungsthread ).

Lösung

  1. Bearbeiten Sie den Komponententest .csproj und ändern Sie die Artikelreferenzen von <Shadow Include="Test References\namespace.accessor" /> in <None Include="Test References\namespace.accessor" /> (Shadow => None).
  2. Löschen Sie einfach alle .accessor-Dateien aus dem Test References-Ordner des Gerätetestprojekts.

Idealerweise würden Sie auch Ihre Komponententests umschreiben, um Verweise auf private Methoden zu entfernen, indem Sie entweder die Struktur neu definieren, um die Anliegen zu trennen, oder indem Sie die Eigenschaften in internal ändern und "friend" mit InternalsVisibleToAttribute verwenden.


Für diejenigen, die das Testen privater Methoden aus irgendeinem Grund weiterhin unterstützen müssen, enthält derselbe Beitrag folgende Vorschläge zur logischen Frage "What is available for me then?":

Für diejenigen, die weiterhin interne APIs testen möchten, haben Sie drei Möglichkeiten: 

  1. Verwenden Sie die Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject-Klasse, um den Zugriff auf interne und private APIs in Ihrem Code zu unterstützen. Dies ist in der Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll-Assembly enthalten. 
  2. Erstellen Sie ein Reflection-Framework, das Ihren Code reflektieren kann, um auf interne oder private APIs zuzugreifen. 
  3. Wenn der Code, auf den Sie zugreifen möchten, intern ist, können Sie möglicherweise mit dem InternalsVisibleToAttribute auf Ihre APIs zugreifen, sodass Ihr Testcode auf die internen APIs zugreifen kann. 

Es gibt jedoch keinen guten Ersatz für die Code-Generierung für die neuen Funktionen, die von den Lanugage-Teams hinzugefügt wurden. Sie können die TestMethod-Stubs erstellen und anschließend den internen Code entfernen. Sie müssen nur den Stub selbst behalten.


Weiterführende Literatur/Quellen, die mir dabei geholfen haben, dies zusammenzufassen:

28
brichins

Klicken Sie mit der rechten Maustaste auf den Ordner mit den Projektverweisen. Referenz hinzufügen> Baugruppen> Erweiterungen. Überprüfen Sie Microsoft.VisualStudio.QualityTools.UnitTestFramework 10.1, und deaktivieren Sie alle älteren Versionen.

2
John H

Dies hängt mit Visual Studio Enterprise 2015 zusammen, das Hinzufügen eines neuen Belastungstests schlug fehl: und spuckte als "Assembly nicht gefunden" Microsoft.VisualStudio.QualityTools.LoadTest, Version = 14.0.0.0, Kultur = neutral, PublicKeyToken = b03f5f7f11d50a3a "

Da Assembly in öffentlichen Assemblys installiert ist, wird die Version 10.0.0.0 angezeigt, die in GAC nicht angezeigt wird.

GAC hatte nur 10.1.0.0. Sobald GAC mit 10.0.0.0 aktualisiert und VS 2015 neu gestartet wurde, sollte das Problem ähnlich wie in diesem Fall behoben werden.

Weitere Informationen für eine bessere Begründung, System Assembly Path und Projektpfad DLL-Pfad ......\Programme (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools .UnitTestFramework.dll

.CSProj-Referenzversion