C # -Richtlinie zur Angabe von 32-Bit- oder 64-Bit-Build

8

Gibt es eine Art von C # -Direktive, die verwendet werden soll, wenn ein Entwicklungscomputer (32-Bit oder 64-Bit) verwendet wird, der etwas mit dem folgenden Effekt anzeigt:

%Vor%

Aber ich möchte dies in Visual Studio tun, da ich eine Anwendung habe, an der ich arbeite, die in 32/64 Bit-Versionen von Vista getestet werden muss.

Ist so etwas möglich?

    
coson 02.07.2009, 20:05
quelle

9 Antworten

13

Können Sie es zur Laufzeit tun?

%Vor%     
marcc 02.07.2009, 20:09
quelle
11

Es gibt zwei zu beachtende Bedingungen mit 64-Bit. Zuerst ist das OS 64-Bit, und zweitens ist die Anwendung in 64-Bit ausgeführt. Wenn Sie nur an der Anwendung selbst interessiert sind, können Sie Folgendes verwenden:

%Vor%

Zur Laufzeit kann der JIT-Compiler die falsche Bedingung entfernen, da die Eigenschaft IntPtr.Size konstant ist.

Um zu überprüfen, ob OS 64-Bit ist, verwenden wir folgendes

%Vor%     
Paul Alexander 02.07.2009 20:11
quelle
3

Sie können eine #if -Direktive verwenden und den Wert als Compiler-Schalter (oder in den Projekteinstellungen) setzen:

%Vor%

und kompilieren mit:

%Vor%

beim Kompilieren eines 64-Bit-Builds.

    
Mehrdad Afshari 02.07.2009 20:07
quelle
2

Was ich in meinem C # -Code verwende, ist IntPtr.Size, es entspricht 4 bei 32 Bit und 8 bei 64 Bit:

%Vor%     
Tamar 02.07.2009 20:12
quelle
2

Sie können vordefinierte Makros verwenden, um die Eigenschaften für die Kompilierung festzulegen

%Vor%     
Yochai Timmer 09.12.2010 07:48
quelle
2

Ich bin mir nicht sicher, ob das das ist, wonach Sie suchen, aber ich überprüfe das IntPtr.Size , um 32 Bit im Vergleich zu 64 Bit Laufzeit zu erkennen. Beachten Sie, dass dies die Laufzeitumgebung angibt, die Sie möglicherweise in WOW64 ausführen

%Vor%     
Maurice Flanagan 02.07.2009 20:12
quelle
2

Ich weiß, dass dies ein altes Thema ist, aber ich musste kürzlich das gleiche Ergebnis erzielen (d. h. zum Zeitpunkt der Erstellung festlegen, nicht zur Laufzeit)

Ich habe neue Build-Konfigurationen (x86 debug, x86 release, x64 debug, x64 release) erstellt und BUILD64 oder BUILD32 im Feld "Bedingte Kompilierungssymbole" in den Anwendungseigenschaften für jede Konfiguration festgelegt.

Wenn ich etwas anderes zwischen den Builds machen wollte (wie zB die Signatur einiger x86 exportierter Methoden von einer .dll ändern), habe ich dann Standard-Build-Anweisungen verwendet, um das zu erreichen, was ich brauchte. zum Beispiel:

%Vor%     
MercifulGiraffe 03.12.2014 03:39
quelle
1

Öffne Configuration Manager von Build . Von dort aus sollten Sie Active solution platform einstellen und eine Konfiguration erstellen, die speziell auf x64, x86 oder Any CPU abzielt. Von dort können Sie einen Code haben, der abhängig von der aktuellen Konfiguration bedingt kompiliert.

Beachten Sie, dass dies normalerweise eine sehr schlechte Idee ist. .Net-Programme werden normalerweise als IL und nicht als systemeigener Code verteilt. Diese IL wird dann vom JIT-Compiler auf jedem lokalen Rechner kompiliert, wenn der Benutzer das erste Mal versucht, ihn auszuführen. Wenn Sie den Standardwert "Beliebige CPU" belassen, erlauben Sie dem JIT-Compiler, diese Bestimmung für jede einzelne Maschine zu treffen.

Die Hauptausnahme dafür ist, wenn Sie eine Abhängigkeit von einer 32-Bit-Bibliothek haben. In diesem Fall möchten Sie nicht, dass der JIT-Compiler jemals für x64 kompiliert wird, weil er Ihr Interop mit der Bibliothek unterbrechen könnte.

    
Joel Coehoorn 02.07.2009 20:11
quelle
0

Es ist nichts eingebaut, das dies für Sie tun würde. Sie könnten jederzeit Ihr eigenes Symbol #define verwenden und für die bedingte Kompilierung verwenden wenn du willst.

    
Andrew Hare 02.07.2009 20:07
quelle

Tags und Links