Laden...

x86 Kompiliert, aber wird trotzdem als x64 ausgeführt

Erstellt von Sclot vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.172 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 12 Jahren
x86 Kompiliert, aber wird trotzdem als x64 ausgeführt

Guten Abend,

Ich habe hier ein Projekt, welches zum ersten mal auf einem 64 Bit Windows 7 laufen soll.
Bis jetzt lief es nur auf 32 Bit-OS und wurde als AnyCPU kompiliert - lief darauf gut.

Jetzt habe ich festgestellt, dass es ein paar Verweise auf x86 DLL´s bzw AnyCPU DLL´s in diesem Projekt gibt.
Demzufolge bekommt man beim starten der Anwendung unter 64 Bit die Meldung "Bad Image Format Exeption".

Jetzt habe ich in der Buildkonfiguration alles explizit auf x86 eingestellt.
Wenn ich diese Anwendung nun aber im Visual Studio Debugger laufen lasse, dann wird sie mit im Taskmanager als 64 Bit angezeigt (das schließe ich daraus das kein * 32 dahinter steht).

Über Google habe ich herausgefunden, dass es eine "CorFlag.exe" im SDK gibt mit der man nachschauen kann, ob eine bestimmte Assembly 32 Bittig kompiliert wurde oder nicht.

In meinem Fall war das nicht der Fall.
Ich könnte vermuten das Vs beim kompilieren die Verweise überprüft und wenn es einen AnyCPU Verweis gefunden hat, ist die exe die dabei am ende herauskommt auch eine AnyCPU Exe - kann das sein?

Mit der "CorFlag.exe" kann man allerdings auch das 32BIT Flag setzen.
Bedeutet: Wenn man eine AnyCPU Assembly hat, kann man über CorFlag das 32BIT Flag setzen und somit wird die Assembly nur mit dem 32Bit Framework ausgeführt.
Das dies funktioniert entnehme ich der "* 32", die dann nach dem Setzend es Flags und Aufrufen der Anwendung im Taskmanager angezeigt wird.
Als 32 Bit Version funktioniert alles wie gewohnt und es Entsteht auch keine BadImageFormat-Exeption.

Jetzt muss mir nur noch irgendwer einen Denkansatz geben, warum das Visual Studio beim kompilieren eine AnyCPU Anwendung draus macht, obwohl ich dem explizit in der Buildkonfiguration gesagt habe das es eine x86 Anwendung werden soll.

Hat da jemand eine Idee?

Danke!

Gelöschter Account
vor 12 Jahren

Hast du mal versucht Verweise zu entfernen um deine Vermutung zu besätigen?
Bedeutet natürlich auch einigen Code auszukommentieren 😕
BTW: Reflector und Co können den Zielprozessor einer Assembly auch auslesen. (im Reflector links unten)

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

Jetzt habe ich in der Buildkonfiguration alles explizit auf x86 eingestellt.

Was hast du umgestellt? Die Platform der Solution bzw. des Projektes oder wirklich explizit das Platform Target in den Build Eigenschaften jedes Projektes. Nämlich nur letzteres stellt wirklich die Plattform um. Ersteres ist nur ne Möglichkeit seine Configuationen flexibel zu verwalten.

Baka wa shinanakya naoranai.

Mein XING Profil.

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 12 Jahren

ui...
Man glaubt es nicht.
Kaum macht man es richtig, schon funktioniert es! 😄

Ok, verstanden hab ich das jetzt aber nicht, was das mit flexibler Konfiguration zu tun hat.

Wo ist da jetzt der logische Sinn bei das er als Target Platform das vom eigentlichen Projekt nimmt und nicht das was in der SLN eingestellt ist?

Trotzdem noch mal vielen vielen dank!