2016-03-31 11 views
2

Ich habe eine C++ - Assembly von Drittanbietern, die ich in meinem C# -Projekt verwenden muss. Daher habe ich einen C++/CLI-Wrapper für die C++ Assembly geschrieben. Alles kompiliert und läuft gut auf meiner Entwicklungsmaschine.Wie führe ich ein Projekt mit einer C++/CLI-Assembly auf einem anderen Computer aus?

Aber wenn ich den Inhalt meines bin Verzeichnisses auf eine unserer anderen Maschinen kopiere, stürzt es ab. Der Grund ist, dass es meine C++/CLI-Wrapper Assembly nicht laden kann. Es gibt die typische Nachricht: FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

So habe ich einige Untersuchungen haben: Ich stellte sicher, dass MyWrapperAssembly nicht gefunden werden konnte, und fügte hinzu, einen Event-Handler zum assembly resolve event. Innerhalb dieses Handlers habe ich MyWrapperAssembly for reflection only geladen. Ich habe dann alle referenced assemblies geladen. Die Reflection Only-Funktion von MyWrapperAssembly funktioniert. Ich bin mir sicher, dass die Datei gefunden wurde. Aber wenn ich versuche, es zu laden

Assembly.LoadFrom("hiddenDirectory\MyWrapperAssembly.dll"); 

Es stürzt mit dem oben genannten Fehler FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

Da die Reflexion nur Last gearbeitet, ich sicher war, dass es etwas falsch in der C++ Schicht sein muss. Ich habe die installierten Versionen von C++ Redistributable auf meinem Entwicklungscomputer und auf der Testmaschine verglichen und festgestellt, dass einige Pakete fehlen. Also habe ich heruntergeladen und installiert diese Pakete auf der Testmaschine:

Und es hat nicht funktioniert. Dann habe ich 6 verschiedene PCs getestet. Mein Programm läuft auf 3 PCs und stürzt auf dem anderen 3 ab. Das einzige, was die PCs unterscheidet, ist die Microsoft Visual C++ 2010 Runtime. Wenn es installiert ist, scheint es zu funktionieren.

Aber ich kann kein Installationsprogramm für dieses Paket im Internet finden. Also habe ich Visual Studio 2013 auf einem PC installiert, auf dem mein Programm abgestürzt ist. Nachdem ich Visual Studio (und damit die C++ Runtime) installiert habe, wird mein Programm ausgeführt.

Also ich nehme an, dass ich diese C++ Laufzeit brauche. Es ist keine Option, Visual Studio auf dem PC unseres Kunden zu benötigen. Also muss ich die C++ - Laufzeit bereitstellen. Aber die Frage ist:

Woher bekomme ich die Visual C++ Runtime?

Oder weiß jemand, wenn ich eine andere Sache vermisse?

+0

Sie müssen wahrscheinlich die .NET Framework/Laufzeiten installiert – OMGtechy

+0

Überprüfen Sie auch, dass Ihr C++ - Code im Freigabemodus kompiliert wird. Ich hatte Probleme, natives C++ auszuführen, das in Debug auf Zielcomputern kompiliert wird, da verschiedene VC-Laufzeitbibliotheken vorhanden sind – MDK

+0

@OMGtechy: das .NET-Framework ist installiert. –

Antwort

1

Wenn Sie Visual Studio 2013 verwenden, benötigen Sie die Laufzeit 2013, nicht die Laufzeit 2010.

Visual C++ Redistributable Packages for Visual Studio 2013

+0

Auf den Computern, auf denen es ausgeführt wird, ist nur die Runtime 2010 installiert. Also ich denke, dass ich mindestens eine installierte Laufzeit brauche. –

+1

@ Rico-E Nein, Sie brauchen die Laufzeit, die mit dem kompilierten Programm übereinstimmt – OMGtechy

+1

@ Rico-E OK, wenn es mit der installierten Laufzeitumgebung 2010 funktioniert, was ist Ihre Frage? Du weißt bereits, wo es ist und wie du es herunterladen kannst, stell sicher, dass es zusammen mit deinem Programm installiert wird. –

1

Sie können die neuesten Runtimes von hier: The latest supported Visual C++ downloads.

Sie benötigen mindestens die mit der VS-Version übereinstimmt, die Sie zum Erstellen des C++/CLI-Projekts verwendet haben (wenn Sie also VS2010 verwenden, benötigen Sie die VC++ 2010-Laufzeitumgebung).

Wenn die C++ - Bibliothek, die Sie umschließen, auch eine VC++ - Laufzeit benötigt, müssen Sie diese ebenfalls installieren. Der Bibliotheksanbieter sollte Ihnen die Abhängigkeiten mitgeteilt haben.

Beachten Sie, dass Sie, wenn Sie mit einer .lib Datei von Drittanbietern verbunden sind, die gleiche VS-Version verwenden sollten, die sie zum Kompilieren verwendet haben. Andernfalls werden Sie zwei verschiedene Laufzeiten gleichzeitig verwenden, was zu Problemen führen kann. C++/CLI muss eine Runtime-kompatible Runtime verwenden, aber es ist weniger wahrscheinlich, dass Probleme auftreten, wenn die Versionen übereinstimmen.

Verwandte Themen