558 Stimmen

Wie behebe ich den Visual Studio-Kompilierungsfehler "Abweichung zwischen Prozessorarchitekturen"?

Ich bin neu in der Projektkonfiguration in Visual Studio 2010, aber ich habe einiges recherchiert und kann dieses Problem immer noch nicht ganz lösen. Ich habe eine Visual Studio-Lösung mit einem C++-DLL, das das C#-DLL referenziert. Das C#-DLL referenziert einige andere DLLs, einige innerhalb meines Projekts und einige externe. Wenn ich versuche, das C++-DLL zu kompilieren, erhalte ich diese Warnung:

Warnung MSB3270: Es gab einen Unterschied in der Prozessorarchitektur des zu erstellenden Projekts "MSIL" und der Prozessorarchitektur des Verweises "[internes C#-DLL]", "x86".

Es sagt mir, dass ich zum Konfigurations-Manager gehen soll, um meine Architekturen auszurichten. Das C#-DLL ist mit der Plattformziel x86 eingestellt. Wenn ich versuche, dies auf etwas anderes zu ändern, wie zum Beispiel Any CPU, beschwert es sich, weil eine der externen DLLs, von der es abhängt, das Plattformziel x86 hat.

Wenn ich mir den Konfigurations-Manager anschaue, zeigt er die Plattform für mein C#-DLL als x86 und für mein C++-Projekt als Win32 an. Das scheint die richtige Konfiguration zu sein; sicherlich möchte ich nicht, dass das Projekt für mein C++-Projekt auf x64 gesetzt wird, was die einzige andere Option ist.

Was mache ich hier falsch?

0 Stimmen

Was ist die Beschwerde, speziell, wenn Sie es auf Any CPU ändern?

2 Stimmen

Ich habe nicht genug Informationen, um eine fundierte Empfehlung abzugeben, aber klicken Sie mit der rechten Maustaste auf Ihre Lösung -> Projekt Build Reihenfolge und stellen Sie sicher, dass Ihr C#-Projekt vor dem C++-Projekt erstellt wird. Wenn nicht, gehen Sie zum Register "Abhängigkeiten" und teilen Sie VS mit, dass das C++-Projekt vom C#-Projekt abhängt.

7 Stimmen

Visual Studio ist wieder Mist darin. Die Plattform oben auf meinem Bildschirm sagt x64, aber die Warnung besagt, dass das Projekt, das erstellt wird, "MSIL" ist. Also sagt Visual Studio mir, dass es eine Diskrepanz zwischen Äpfeln und Orangen gibt, wenn ich keine Äpfel benutze. Können wir es in Visual Stupido umbenennen?

-1voto

Gregory Morse Punkte 344

Es sollte einen Weg geben, um eine .NET EXE/DLL als AnyCPU zu erstellen und alle Abhängigkeiten von unmanaged DLLs sowohl für x86 als auch für x64 zu kompilieren, vielleicht sogar mit unterschiedlichen Dateinamen. Dann könnte das .NET-Modul dynamisch die richtige Version basierend auf der Prozessorarchitektur zur Laufzeit laden. Das würde AnyCPU leistungsfähig machen. Wenn die C++ DLL nur x86 oder x64 unterstützt, ist AnyCPU natürlich sinnlos. Die Idee des Bündelns beider Versionen habe ich noch nicht implementiert gesehen, da der Konfigurations-Manager nicht einmal die Möglichkeit bietet, das gleiche Projekt zweimal mit einer anderen Konfiguration/Plattform für mehrere Bündelungen zu erstellen, um AnyCPU oder sogar andere Konzepte wie eine beliebige Konfiguration möglich zu machen.

2 Stimmen

Willkommen bei Stackoverflow! Können Sie versuchen, diese Antwort ein wenig zu fokussieren/neu zu formatieren?

1 Stimmen

Das klingt nach einer guten Frage, oder einem Blog-Beitrag oder einem Feature-Request auf Connect... es beantwortet diese Frage tatsächlich nicht.

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