5 Stimmen

Warum erhalte ich eine FileNotFound-Ausnahme, wenn ich ein anderes Projekt aus derselben Lösung referenziere?

Ich lerne gerade, wie man NUnit benutzt. Ich habe mein Hauptprojekt in seiner Lösung, und erstellt ein separates Projekt in der gleichen Lösung, die meine Unit-Tests, mit seiner eigenen Namespace halten wird. Von diesem Projekt füge ich einen Verweis auf das Hauptprojekt hinzu und füge eine

using MainProjectNamespace;

auf die Spitze zu treiben.

Wenn ich zu NUnit gehe, funktionieren alle Tests, die ich habe, die nicht auf das Hauptprojekt verweisen. Das sind Tests, die ich nur eingerichtet habe, um mich an NUnit zu gewöhnen, und die so gut wie nutzlos sind. Wenn NUnit die echten Tests ausführt, löst der Test diese Ausnahme aus:

TestLibrary.Test.TestMainProject: System.IO.FileNotFoundException : Datei oder Assembly konnte nicht geladen werden 'WpfApplication2, Version = 1.0.0.0, Kultur=neutral, PublicKeyToken=null' oder eine ihrer Abhängigkeiten laden. Das System kann die angegebene Datei nicht finden.

Warum erhalte ich diese Ausnahme?

EDIT :

Wenn ich nun versuche, die Assembly in NUnit zu laden, wird sie nicht einmal geladen (so dass ich nicht einmal die Chance habe, die Tests auszuführen)

Dies ist die Ausnahme, die auftritt, und die Stapelverfolgung:

System.IO.DirectoryNotFoundException: Ein Teil des Pfades 'LONG PATH HERE I DON'T WANT TO TYPE' konnte nicht gefunden werden

System.IO.DirectoryNotFoundException...

Server stack trace: 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.Directory.SetCurrentDirectory(String path)
    at NUnit.Core.DirectorySwapper..ctor(String directoryName)
    at NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, Boolean autoSuites)
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, String testName, Boolean autoSuites)
    at NUnit.Core.TestSuiteBuilder.Build(TestPackage package)
    at NUnit.Core.SimpleTestRunner.Load(TestPackage package)
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
    at NUnit.Core.RemoteTestRunner.Load(TestPackage package)
    at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    at NUnit.Core.TestRunner.Load(TestPackage package)
    at NUnit.Util.TestDomain.Load(TestPackage package)
    at NUnit.Util.TestLoader.LoadTest(String testName)

EDIT2: Der obige Pfad befindet sich eindeutig auf meiner Festplatte

EDIT3: Ich habe gerade von Debug zu Release gewechselt, auf NUnit, und die dll aus dem Release-Ordner von TestingLibrary geladen... Und sie wurde geladen! 1 der 3 Namespace-spezifischen Tests funktionierte. Ich komme voran.

EDIT4: Tja, tja, tja... Ich kann die Tests jetzt tatsächlich durchführen, aber ich bin wieder bei dem ursprünglichen Fehler. IT findet die Baugruppe für das Hauptprojekt nicht

5voto

Marc Gravell Punkte 970173

Der Compiler entfernt alle ungenutzten Verweise und stellt die DLL nicht unnötig bereit. A using gilt (für sich genommen) nicht als Verwendung. Entweder markieren Sie die DLL für die Bereitstellung über die Einstellung "In das Ausgabeverzeichnis kopieren", oder Sie fügen einen Code hinzu, der wirklich verwendet in der DLL deklarierte Typen.

1voto

shahkalpesh Punkte 32505

Haben Sie den Namen der Ausgabe-Assembly ODER des Namespace im Quellprojekt umbenannt?

Ihre Quelldatei scheint "WPFApplication1" zu sein und ich vermute, dass Sie den Ausgabetyp von dll auf exe geändert haben?

1voto

Gregor Punkte 338

Ich hatte das gleiche Problem und RKitsons Antwort hat mir geholfen.

Grundsätzlich habe ich alle Dlls, von denen mein Projekt abhängt, sowie die nunit.framework.dll in dasselbe Verzeichnis kopiert...obj/debug/ Dies ist eine Möglichkeit, dies zu tun.

Die elegante Methode besteht darin, die Projektkonfiguration in Visual Studio auf der Registerkarte "Build" in den Freigabemodus zu ändern, und wenn das Projekt korrekt eingerichtet ist, sollten alle abhängigen DLLs in ein entsprechendes Verzeichnis "out" oder "release" kopiert werden.

0voto

RKitson Punkte 2002

Es sieht so aus, als ob eine der Baugruppen, auf die Sie in Ihrer Anwendung verweisen, von einer anderen Baugruppe abhängig ist, die sich nicht in Ihrem Bin-Ordner befindet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X