2009-03-05 9 views
3

Que faisons-nous si nous avons des développeurs travaillant sur des machines 64 bits et d'autres sur des machines 32 bits, mais nous devons référencer des assemblages non gérés qui doivent être en x86 pour la moitié de l'équipe et x64 pour l'autre moitié? Existe-t-il une solution autre que la mise à jour manuelle des références chaque fois que quelqu'un sur une plate-forme 64 bits obtient le dernier?Assemblages x64 non gérés dans un environnement de développement .NET

Répondre

1

Vous voulez faire cela dans le cadre de votre construction, non?

Ecrivez une étape de préconfiguration pour copier la DLL référencée d'une position permanente dans votre arborescence source vers le projet local. Utilisez la macro $ (ConfigurationName) ou $ (PlatformName) pour sélectionner quelle version de la DLL non managée est réellement copiée. Vous gardez simplement vos DLL dans des dossiers séparés avec des noms qui correspondent au nom de la configuration ou au nom de la plateforme.

+0

En fait, c'est au moment du design. Nous avons la solution pour le processus de construction en place, mais quelques-uns des développeurs compilent dans Debug | x64. – PeteK

1

Il est plutôt étrange que les développeurs avec la machine x64 exécutent volontiers la version 64 bits. Visual Studio ne prend pas en charge Modifier + Continuer en mode x64, c'est une perte. La solution de contournement pour cela est simple, définissez Platform Target sur x86. Automagiquement aussi résoudre votre problème DLL non géré.

+0

C'est étrange, et j'en parlerai avec les trois moutons noirs, mais ce serait encore mieux s'il y avait une solution à cela. Je suppose que c'est un joli cas, mais je vais continuer à chercher. – PeteK

0

Une autre solution consiste à modifier un peu votre code. Il est décrit dans la réponse de Milan Gardian à this question.

Fondamentalement, il implique l'écriture de votre propre gestionnaire de référence d'assembly pour déterminer quel assembly charger lors de l'exécution, à condition que vous ayez accès aux versions (32 et 64 bits) de l'assembly. Je viens de mettre en œuvre cette solution moi-même, et cela fonctionne comme un charme.

Ma situation est la suivante:
Je suis en train de développer un programme .NET destiné à "Any CPU" sur Windows 7 64-bit. J'ai ajouté la référence d'assembly 32 bits et définissez Copy Local sur false. J'utilise des événements post-construction pour copier l'assembly 32 et 64 bits dans le dossier de sortie et je veille à donner un nom différent à l'assembly 32 bits que dans la référence. C'est parce que je veux forcer mon résolveur assembleur personnalisé pour lancer et faire sa chose, en raison du fait que le résolveur d'ensemble par défaut .NETs ne peut pas résoudre la référence. Au moment de l'exécution, l'assembly correct est chargé et lors de la compilation, je n'obtiens aucune erreur. Il convient de noter que je n'ai pas eu le temps de confirmer que cela fonctionne maintenant sur OS 32 bits, mais je ne vois pas pourquoi cela ne devrait pas fonctionner.

Questions connexes