558 Stimmen

Wie behebe ich den Kompilierungsfehler von Visual Studio "Mismatches zwischen Prozessorarchitekturen"?

Ich bin neu in der Projektkonfiguration in Visual Studio 2010, aber ich habe einige Forschung betrieben und kann dieses Problem immer noch nicht ganz lösen. 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 eine Inkonsistenz zwischen der Prozessorarchitektur des 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 dem Zielplattform x86 eingerichtet. Wenn ich versuche, dies auf etwas anderes zu ändern, wie z.B. Any CPU, beschwert es sich, weil eine der externen DLLs, auf die es sich bezieht, das 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. Das scheint die richtige Konfiguration zu sein; sicherlich möchte ich nicht, dass das Projekt für mein C++-Projekt auf x64 eingestellt ist, was die einzige andere Option ist, die präsentiert wird.

Was mache ich hier falsch?

0 Stimmen

Was ist die Beschwerde, wenn Sie sie speziell 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 -> Projektbuildreihenfolge und stellen Sie sicher, dass Ihr C#-Projekt vor dem C++-Projekt erstellt wird. Wenn nicht, gehen Sie zum Registerkarte Abhängigkeiten und geben Sie VS Bescheid, dass das C++-Projekt vom C#-Projekt abhängt.

7 Stimmen

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

2voto

ertbaran Punkte 11

Ich habe gerade das Plattformziel auf "Any CPU" in den Eigenschaften geändert und es ist erledigt! Vielleicht musst du ein Release-Build erstellen.

Um dies zu tun:

Ihre Projekt Eigenschaften

Plattformziel

1voto

Thick_propheT Punkte 946

Für mein Projekt habe ich die Anforderung, sowohl für x86 als auch für x64 bauen zu können. Das Problem dabei ist, dass es jedes Mal zu Beschwerden kommt, wenn Sie Verweise hinzufügen, während Sie eines verwenden, und dann das andere bauen.

Meine Lösung besteht darin, die Dateien *.csproj manuell zu bearbeiten, sodass Zeilen wie diese:

geändert werden zu:

1voto

user1257110 Punkte 21

Ich hatte ein ähnliches Problem, das durch die MS UNIT Test DLL verursacht wurde. Meine WPF-Anwendung wurde als x86 kompiliert, aber die Unit-Test-DLL (referenzierte EXE-Datei) als "Any CPU". Ich habe die Unit-Test-DLL geändert, um für x86 kompiliert zu werden (genauso wie die EXE) und das Problem wurde gelöst.

1voto

Daryl Punkte 18141

Sie erhalten diese Warnung möglicherweise auch für MS Fakes-Assemblys, was nicht so einfach zu lösen ist, da das f.csproj auf Befehlen basiert. Zum Glück ermöglicht das Fakes-XML, es dort hinzuzufügen.

1voto

ssamuel Punkte 419

Ich hatte schon einmal ein ähnliches Problem, insbesondere beim Hinzufügen einer Testlösung zu einer bestehenden x64-Lösung, wie SharePoint. In meinem Fall scheint es daran zu liegen, dass bestimmte Projektvorlagen standardmäßig als bestimmte Plattformen hinzugefügt werden.

Hier ist die Lösung, die oft für mich funktioniert: Setze alles in Configuration Manager auf die richtige Plattform (das aktive Konfigurations-Dropdown-Menü, normalerweise Debug genannt, ist ein guter Weg dorthin zu gelangen) und Projektplattform (in den Projekt Eigenschaften), dann baue das Projekt und setze dann alles zurück auf AnyCPU. Manchmal muss ich einige Abhängigkeiten entfernen und erneut hinzufügen (DLLs in den Eigenschaften jedes Projekts) und manchmal muss "Tests in einem 32-Bit- oder 64-Bit-Prozess ausführen" (Doppelklick auf Local.testsettings und gehe zu Hosts) geändert werden.

Es erscheint mir, als ob man einfach etwas einstellen und dann zurücksetzen muss, aber wahrscheinlich passiert hinter den Kulissen noch mehr, das ich nicht sehe. Es hat jedoch in der Vergangenheit ziemlich zuverlässig für mich funktioniert.

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