Keine der obigen Antworten schien für mich zu arbeiten, vielleicht weil ich auf VS2015 bin, aber das schien mir ein guter Grund, meine eigene Lösung für dieses Problem hinzuzufügen.
Meine spezifische Situation ist die gleiche wie @ Eternal21 - Ich habe eine WPF-Benutzeroberfläche, die eine Client-Bibliothek verbraucht, die SQLite über nuget hinzugefügt hat. Und, ja, das Problem bestand darin, dass die Interop.dll nicht in die Startanwendung kopiert wurde (d. H. In die WPF-Benutzeroberfläche, auf der SQLite nicht installiert ist).
Die Lösung, SQLite einfach mit nuget zum WPF-Projekt hinzuzufügen, ist eine schnelle und einfache Lösung, wenn Sie es eilig haben.
Meine leicht umständliche Lösung verwendet XCOPY, hat aber den Vorteil, dass sie sowohl die x86- als auch die x64-Verzeichnisse kopiert und auch mit Debug- und Release-Builds zurechtkommt. Sein Nachteil ist, dass es fest codierte Projektnamen enthält. Ich kann sehen, wie man ein Makro verwenden kann, um das erste loszuwerden, aber ich konnte nicht leicht sehen, wie man das zweite loswird, also müssten Sie es manuell ändern, wenn sich der Projektname änderte (aber das ist ziemlich selten).
Meine Lösung ist es, diese XCOPY-Befehle in dem Post-Build des Startprojektes zu verwenden:
xcopy $(SolutionDir)DALProject\bin\$(ConfigurationName)\x64\SQLite.Interop.dll $(SolutionDir)WPFProject\bin\$(ConfigurationName)\x64\*.* /C /F /S /E /Y
xcopy $(SolutionDir)DALProject\bin\$(ConfigurationName)\x86\SQLite.Interop.dll $(SolutionDir)WPFProject\bin\$(ConfigurationName)\x86\*.* /C /F /S /E /Y
/C - Setzt das Kopieren fort, auch wenn Fehler (vielleicht ist dies nicht erforderlich).
/F - Zeigt die vollständigen Pfade von Dateien an, die kopiert werden (kann zur Bereinigung der Build-Ausgabe weggelassen werden).
/S - Kopiert Unterverzeichnisse (das war der einzige Weg, ich konnte es die Ordner/x86 und/x64 erstellen).
/G - Kopiert Verzeichnisse und Unterverzeichnisse (möglicherweise Duplikate/S).
/Y - Unterdrückt die Eingabeaufforderung, wenn die Zieldatei bereits existiert.
Ich setze dies nur auf den erfolgreichen Build laufen und es funktioniert ein Vergnügen für mich. Hoffe es hilft jemandem.
Interessant, ich sie dort sehen. Also kopiert es sie dorthin, wo sie zur Laufzeit nicht gefunden werden können? Ich frage mich, ob es für maschinenspezifische Builds funktionieren soll. Ich habe x86 und x64 Builds versucht, aber Fehler bekommen. Könnte ein Problem an meinem Ende sein, nicht sicher. – Vimes
Sie * werden * zur Laufzeit gefunden. Wenn ich diese Ordner lösche, erhalte ich einen Ladefehler. Wenn nicht, funktioniert es. Ich habe das nur entdeckt, weil ich die Dateien aus dem Ausgabeverzeichnis an einen anderen Ort kopiert habe, um sie auszuführen, und ich habe keine Unterverzeichnisse kopiert. – Richard
Nicht für mich. Ich bekomme eine DllNotFoundException zur Laufzeit. Bilden all Ihre Projekte als AnyCPU? – Vimes