Scénario: J'ai un projet contenant deux projets C# qui, pour des raisons historiques, doivent communiquer entre eux en utilisant COM (via COM Interop). Le serveur COM est un objet d'automatisation en cours (appeler cela le « Serveur ») et le COM client est une application simple C# console qui charge le serveur comme ceci:Enregistrement d'assemblys x64 pour COM Interop
var objTypee = Type.GetTypeFromProgID("ProgID.Interop3264");
var objLateBound = Activator.CreateInstance(objType);
Visual Studio enregistre automatiquement les ensembles pour COM Interop si cette option est activée dans les paramètres du projet, c'est ce que j'utilise pour enregistrer le serveur (l'expérience du développeur ne m'intéresse ici, l'installation est un problème séparé) et tout fonctionne bien tant que les projets sont configurés pour générer Le code 32 bits ou le client COM est 32 bits. Le problème survient lors du développement sur un système 64 bits et les deux projets sont configurés pour générer du code pour 'Any CPU' qui les fait fonctionner en mode 64 bits. Cela génère l'erreur suivante:
"Retrieving the COM class factory for component with CLSID {6F597EDF-9CC8-4D81-B42E-1EA9B983AB02} failed due to the following error: 80040154."
Après quelques recherches, il semble que les scripts MSBuild effectuent uniquement l'enregistrement 32 bits. Il place le ProgID dans la section de registre 64 bits, avec son CLSID de sous-clé, et le bon classID. Mais le truc CLSID {clsid} n'est pas là. C'est seulement dans la sous-arborescence WOW6432, pour 32 bits. Ainsi, l'activateur ne peut pas récupérer l'usine de classe parce qu'il ne peut pas trouver la chose.
Je serai vraiment impressionné par la communauté SO si je reçois une réponse à cette question, mais voilà:
Quelqu'un at-il d'autre terme ce problème en face? Comment l'avez-vous résolu? Quelle est la manière la plus simple de s'assurer que les assemblys COM Interop sont correctement enregistrés sur les machines de développement 64 bits?
Tim, trouvez-vous peut-être cette solution sur votre propre? J'ai un problème similaire. –