8
votes

C # Directive pour indiquer une construction 32 bits ou 64 bits

existe une sorte de directive C # à utiliser lors de l'utilisation d'une machine de développement (32 bits ou 64 bits) qui indique quelque chose à l'effet de: xxx

mais je veux faire Ceci dans Visual Studio, dans la mesure où j'ai une application, je travaille sur ce doit être testé dans des versions 32/64 bits de Vista.

est quelque chose comme ça possible?


0 commentaires

9 Réponses :



3
votes

Vous pouvez utiliser un #if directive et définir la valeur sous forme d'interrupteur de compilateur (ou dans les paramètres du projet): xxx

et compile avec: xxx

Lors de la compilation d'une construction 64 bits.


0 commentaires

13
votes

Pouvez-vous le faire au moment de l'exécution?

if (IntPtr.Size == 4)
  // 32 bit
else if (IntPtr.Size == 8)
  // 64 bit


0 commentaires

11
votes

Il y a deux conditions à être conscientes avec 64 bits. Tout d'abord est le os 64 bits, et le second est l'application exécutée en 64 bits. Si vous ne vous inquiétez que de l'application elle-même, vous pouvez utiliser ce qui suit: xxx

au moment de l'exécution, le compilateur JIT peut optimiser le faux conditionnel car la propriété IntPTR.Size est constante.

Incidemment, pour vérifier si le os est 64 bits que nous utilisons le suivant xxx


0 commentaires

1
votes

Ouvrez le Configuration Manager à partir de la version . De là, vous devriez être en mesure de définir la plate-forme de solution et créer une configuration spécifiquement cible x64, x86 ou tout processeur. De là, vous pouvez avoir un code qui compile conditionnellement basé sur la configuration actuelle.

Notez que c'est généralement une très mauvaise idée, cependant. Les programmes .NET sont normalement distribués en IL plutôt que du code natif. Cet IL est ensuite compilé par le compilateur JIT sur chaque machine locale la première fois que l'utilisateur essaie de l'exécuter. En laissant le "tout processeur" par défaut sélectionné, vous autorisez le compilateur JIT à effectuer cette détermination pour chaque machine individuelle.

L'exception principale pour cela est lorsque vous avez une dépendance sur une bibliothèque 32 bits. Dans ce cas, vous ne voulez pas que le compilateur JIT ait jamais compilé pour X64, car cela pourrait briser votre interopie avec la bibliothèque.



2
votes

Je ne suis pas sûr que c'est ce que vous recherchez, mais je vérifie le intptr.size code> pour détecter 32 bits par rapport à 64 bits d'exécution. Notez que cela vous indique l'environnement d'exécution, vous pouvez utiliser WOW64

if (IntPtr.Size == 4)
{
    //32 bit
}
else if (IntPtr.Size == 8)
{
    //64 bit
}
else
{
    //the future
}


0 commentaires

2
votes

Qu'est-ce que j'utilise dans mon code C # est IntPTR.Size, il est égal à 4 sur 32 bits et 8 sur 64 bits: xxx


0 commentaires

2
votes

Vous pouvez utiliser des macros prédéfinies pour définir les propriétés sur la compilation

    #if (_WIN64) 
  const bool IS_64 = true;
#else
  const bool IS_64 = false;
#endif


0 commentaires

2
votes

Je sais que c'est un ancien sujet, mais je devais récemment obtenir le même résultat (c.-à-d. Déterminer à la hauteur de la construction, pas l'heure d'exécution)

J'ai créé de nouvelles configurations de construction (X86 DEBUG, X86 version x86, X64 Débogou, X64 version) et définissez Build64 ou Build32 dans la zone "Symboles de compilation conditionnelle" dans les propriétés de l'application pour chaque configuration.

Lorsque je devais faire quelque chose de différent entre les constructions (comme modifier la signature sur certaines méthodes exportées x86 D'un fichier .dll), j'ai ensuite utilisé des directives de construction standard pour atteindre ce dont j'avais besoin. Par exemple: xxx


0 commentaires