558 Stimmen

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

Ich bin neu in der Projekt-Konfiguration in Visual Studio 2010, aber ich habe einige Recherchen durchgeführt und kann dieses Problem immer noch nicht ganz verstehen. Ich habe eine Visual Studio-Lösung mit einem C++-DLL, das auf das C#-DLL verweist. Das C#-DLL verweist auf 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 zwischen der Prozessorarchitektur des Projekts, das erstellt wird ("MSIL") und der Prozessorarchitektur der Referenz "[internes C#-DLL]", "x86".

Es sagt mir, dass ich zum Konfigurations-Manager gehen soll, um meine Architekturen abzugleichen. Das C#-DLL ist mit der Zielplattform x86 eingerichtet. Wenn ich versuche, dies auf etwas anderes zu ändern, wie zum Beispiel Any CPU, beschwert es sich, weil eine der externen DLLs, von denen es abhängt, die Zielplattform 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. Dies scheint die richtige Konfiguration zu sein; sicherlich möchte ich nicht, dass das Projekt für mein C++-Projekt die Plattform auf x64 festgelegt hat, was die einzige andere Option ist, die präsentiert wird.

Was mache ich hier falsch?

0 Stimmen

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

2 Stimmen

Ich habe nicht genug Informationen, um einen fundierten Vorschlag zu machen, aber klicken Sie mit der rechten Maustaste auf Ihre Lösung -> Projekt-Bauauftrag und stellen Sie sicher, dass Ihr C#-Projekt vor dem C++-Projekt erstellt wird. Wenn nicht, gehen Sie zum Tab Abhängigkeiten und teilen Sie VS mit, dass das C++-Projekt vom C#-Projekt abhängt.

7 Stimmen

Visual Studio ist wieder Mist dabei. Die Plattform oben auf meinem Bildschirm zeigt x64 an, aber die Warnung besagt, dass das zu erstellende Projekt "MSIL" ist. Also sagt Visual Studio mir, dass es einen Unterschied 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 eine Möglichkeit geben, um eine .NET EXE/DLL als AnyCPU zu erstellen und alle nicht verwalteten DLLs, von denen sie abhängt, sowohl mit x86 als auch mit x64 zu kompilieren, möglicherweise mit unterschiedlichen Dateinamen gebündelt, und dann das .NET-Modul dynamisch das Richtige basierend auf seiner Prozessorarchitektur zur Laufzeit laden lassen. Das würde AnyCPU mächtig machen. Wenn die C++ DLL nur x86 oder x64 unterstützt, dann ist AnyCPU natürlich sinnlos. Die Bündelungsidee habe ich jedoch noch nicht implementiert gesehen, da der Konfigurations-Manager nicht einmal eine Möglichkeit bietet, das gleiche Projekt zweimal mit einer anderen Konfiguration/Plattform für mehrere Bündelungen zu erstellen, die AnyCPU oder sogar andere Konzepte wie jede Konfiguration möglich 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, einem Blogbeitrag oder einem Feature-Antrag auf Connect... es beantwortet diese Frage eigentlich 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