32/64 Bit Verwirrung mit einer .NET-Programmdatei

8

Ich habe eine ausführbare Datei mit Visual Studio 2005 mit C # erstellt. dumpbin meldet, dass es x86 ist und behauptet wird, dass es als x86-Ziel erstellt wurde. Wenn ich versuche, es auszuführen, wird es jedoch irgendwie zu einer 64-Bit-ausführbaren Datei, wie von Task-Manager, Prozess-Explorer und procmon gezeigt, dass es Framework64 lädt. Und es schlägt schließlich fehl, weil eine 32-Bit-DLL nicht geladen werden konnte. Was könnte dieses Verhalten verursachen?

    
MK. 27.07.2011, 15:46
quelle

4 Antworten

19

Sie erstellen es mit dem AnyCPU-Ziel. Wenn Sie möchten, dass es auch auf einem 64-Bit-System x86 ist, müssen Sie x86 als Ziel haben.

Wenn Sie auf AnyCPU abzielen, führt der Loader den Prozess als 64-Bit-Prozess auf einem 64-Bit-System aus, aber als 32-Bit-Prozess auf einem 32-Bit-System.

    
David Heffernan 27.07.2011, 15:48
quelle
3

Ändern Sie das Plattformziel von "Any" auf "x86" in der Projekteigenschaften / Build-Konfigurationsliste.

    
James Johnston 27.07.2011 15:50
quelle
3

Man kann corflags.exe verwenden, um die Ausführung als 32-Bit zu erzwingen.

%Vor%     
BQ. 27.07.2011 18:53
quelle
0

"Was könnte dieses Verhalten verursachen?"

Um bei der Beantwortung dieser Frage technisch genau zu sein, aber nicht ganz in dem Geist, den Sie gefragt haben, ist das Fehlen der 64-Bit-DLL die Ursache für dieses Verhalten.

Warum hat das Programm keine 64-Bit-Version davon?

In ein paar Jahren bezweifle ich, dass 32-Bit-Systeme irgendwo existieren werden, außer dass ARM- und ARM-Systeme neue DLLs benötigen, die sowieso neu kompiliert werden müssen.

    
Zan Lynx 27.07.2011 20:36
quelle

Tags und Links