web-dev-qa-db-fra.com

Impossible d'ajouter une référence à Outlook 2016 (Office 365) Interop (16.0.0.0)

J'essaie d'ajouter une référence à la "bibliothèque d'objets Microsoft Outlook 16.0" dans un projet WPF C # .NET 4.6.1, car j'ai installé Office 2016. Les versions précédentes de la bibliothèque d'objets ne sont pas compatibles avec la version 2016 d'Office.

Si j'utilise l'éditeur VBA d'Excel, la bibliothèque d'objets Microsoft Outlook 16.0 est répertoriée et existe dans C:\Program Files\WindowsApps\Microsoft.Office.Desktop_16010.9126.2116.0_x86_8wekyb3d8bbwe\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSOUTL.OLB, Comme vous pouvez le voir ci-dessous:

enter image description here

Cependant, lorsque j'utilise Visual Studio, l'onglet COM ne répertorie pas "Bibliothèque d'objets Microsoft Office 16.0" et lorsque j'essaie de naviguer vers C:\Program Files\WindowsApps, J'obtiens "Vous n'avez actuellement pas l'autorisation d'accéder à ce dossier", et en cliquant sur "Continuer" (pour y accéder), vous obtenez "On vous a refusé l'autorisation d'accéder à ce dossier".

Donc, fondamentalement, les DLL Office 2016 semblent avoir été cachées dans un dossier inaccessible à l'homme, au chien et à l'administrateur local.


Tout ce que j'essaie de faire est de me connecter à l'application Outlook ouverte, puis d'envoyer un e-mail avec une pièce jointe, alors peut-être qu'une autre question à poser est la suivante: y a-t-il une nouvelle manière complexe de communiquer avec Outlook 2016 qui n'a pas surgi mon Googleathon?


Il convient également de noter que ma version d'Office est installée en tant qu'application Windows Store et n'apparaît donc pas dans la liste habituelle Ajout/Suppression de programmes, donc je ne trouve aucune option de `` réparation '' pour l'installation.

Merci.


Une enquête plus approfondie révèle que je fais la bonne chose - essayer d'ajouter une référence COM à "Microsoft Outlook 16.0 Object Library" est maintenant la bonne façon de cibler Outlook ... https://stackoverflow.com/a/ 21018418/5040941 .

J'ai vérifié le GAC et les assemblées ne sont pas enregistrées. J'ai effectué une réparation via l'option du menu Démarrer "Applications et fonctionnalités" avec le bouton droit de la souris, et elles n'apparaissent toujours pas - c'est comme si les applications du Windows Store inséraient simplement leurs DLL dans le dossier Program Files\WindowsApps\*, Et ne vous embêtez pas à les inscrire au GAC.


En réponse aux commentaires très appréciés!

Utilisation du code suivant

Outlook.Application application = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");

Si j'utilise le paquet nuget Microsoft.Office.Interop.Outlook, J'obtiens une exception System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'.

Si j'essaie d'utiliser des références Microsoft Outlook 15.0 Object Library Ou Microsoft Outlook 14.0 Object Library Via l'onglet Assemblys/Extensions de Ajouter une référence, j'obtiens une exception System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'.

Je ne pense pas que l'accès au dossier WindowsApps soit la solution. Premièrement, il est verrouillé pour une raison qui indique généralement le risque de problèmes si je commence à fouiller et à modifier les autorisations de sécurité, sans parler du fait que le maintien d'une copie de la dernière DLL de ma solution ajoutera sans aucun doute une complexité inutile à mon projet.

Deuxièmement, mais plus important encore, si j'ai installé Office et que je peux accéder à la bibliothèque d'objets Microsoft Outlook 16.0 à partir d'Excel Vba, pourquoi ne puis-je pas y accéder à partir de Visual Studio?

Il y a évidemment un problème avec l'installation qui n'enregistre pas correctement les DLL, seul Excel a une astuce qu'il utilise pour rendre la référence disponible de toute façon.


Est-ce que quelqu'un qui a lu ceci a réussi à installer Office 365/2016 Windows Store et a trouvé une référence à la bibliothèque d'objets Microsoft Outlook 16.0 dans Visual Studio?

Suis-je le seul avec ce problème?! Parce qu'il affecte plusieurs ordinateurs de mon bureau exécutant Windows 10 et Office 365 ...


En réponse à RogerN (merci), veuillez voir l'image ci-dessous - Je n'ai pas la version 16 de Microsoft.Office.Interop.Outlook et Microsoft.Office.Core n'est pas répertorié non plus.

enter image description here

Si j'essaie d'utiliser la bibliothèque v15, j'obtiens l'erreur suivante:

System.Runtime.InteropServices.COMException HResult=0x80040154 Message=Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Source=mscorlib


* ET LA RÉPONSE IS *

Les deux ordinateurs que j'ai achetés auprès de Dell sont 64 bits, mais ils sont préinstallés avec des versions 32 bits de Windows Store de MS Office 2016/365.

Afin de résoudre le problème, j'ai dû:

  • désinstaller l'application du magasin de Settings > Apps > Apps&Features > Microsoft Office Desktop Apps > Uninstall
  • connectez-vous à portal.office.com
  • sélectionnez installer les applications bureautiques, avancées, en choisissant la version 64 bits

Je ne comprends pas pourquoi Dell pense que nous voulons que les versions 32 bits soient installées sur des machines 64 bits, ou pourquoi quelqu'un de Microsoft n'a pas publié de solution à ce problème, mais RogerN avait néanmoins raison. Merci à tous d'avoir pris du temps pour m'aider.

En développant mon commentaire précédent: D'après ce que vous avez décrit, il semble que vous ayez installé une version 32 bits de Microsoft Office sur une machine 64 bits. Seuls les objets COM 32 bits auraient été enregistrés, et par conséquent une application .NET 64 bits ne pourrait pas les trouver. Si vous recherchez dans votre registre, vous devez constater que l'ID de classe 0006F03A-0000-0000-C000-000000000046 est uniquement enregistré sous le Wow6432Node.

Pour résoudre le problème, vous pouvez soit installer la version 64 bits d'Office, soit forcer votre application .NET à cibler la plate-forme x86.

2
RogerN