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?
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% Sie können eine #if
-Direktive verwenden und den Wert als Compiler-Schalter (oder in den Projekteinstellungen) setzen:
und kompilieren mit:
%Vor%beim Kompilieren eines 64-Bit-Builds.
Sie können vordefinierte Makros verwenden, um die Eigenschaften für die Kompilierung festzulegen
%Vor% 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
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% Ö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.
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.
Tags und Links c# visual-studio-2008