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: 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. P> est quelque chose comme ça possible? P> P>
9 Réponses :
Il n'y a rien de construit cela qui le fera pour vous. Vous pouvez toujours #define code> < / a> votre propre symbole et utilisez-le pour la compilation conditionnelle si vous le souhaitez. P>
Vous pouvez utiliser un et compile avec: p> Lors de la compilation d'une construction 64 bits. p> p> #if code> directive et définir la valeur sous forme d'interrupteur de compilateur (ou dans les paramètres du projet):
Pouvez-vous le faire au moment de l'exécution?
if (IntPtr.Size == 4) // 32 bit else if (IntPtr.Size == 8) // 64 bit
Il y a deux conditions à être conscientes avec 64 bits. Tout d'abord est le os em> 64 bits, et le second est l'application em> 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: au moment de l'exécution, le compilateur JIT peut optimiser le faux conditionnel car la propriété IntPTR.Size est constante. P> Incidemment, pour vérifier si le os em> est 64 bits que nous utilisons le suivant p>
Ouvrez le 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. P>
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. P> Configuration Manager CODE> à partir de la version code> code>. De là, vous devriez être en mesure de définir la plate-forme de solution code> CODE> 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. P>
En réalité, la compilation de "n'importe quel processeur" tandis que en mode 64 bit vous empêche de déployer au mode 32 bit, sauf si MM ne corrige que ce bogue dans VS2008 ... mais dernier j'ai essayé, vous deviez spécifier 32 bits.
@Neil: Je fais tout mon développement sur une machine de 64 bits et je n'ai jamais vu ce problème.
À partir d'un MS MVP: "Le problème est le déploiement. Les projets de fichiers MSI / de déploiement doivent être ciblés sur une plate-forme. Cela signifie que si vous souhaitez un déploiement X86 / X64, vous compilez une fois votre DLL une fois, puis construisez deux projets de déploiement. Ce modèle contient également vrai pour les modules de fusion et tels. " Eggheadcafe.com/.../a>
Je dirais réellement que le problème est plus large que les États là-bas. Mais tout le monde ne sera pas dans ces problèmes.
Cela ne s'applique toujours que lorsque vous ciblez explicitement des plates-formes spécifiques. Les assemblages ciblent toujours n'importe quel processeur. Le projet MSI pourrait spécifier 32/64 bits. En pratique, le MSI peut simplement être 32 bits et l'application exécutera toujours 64 bits une fois installé.
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
}
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:
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
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. p>
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: p>