13 votes

Outils VSTO : Mise à niveau d'Office 2010 vers 2013

Je travaille sur un projet d'outils VSTO pour Excel. Je suis en train de mettre à jour ma machine. Mon "ancien" ordinateur portable fonctionnait sous Windows 7 x64 avec Office 2010 et Visual Studio 2012. Ma nouvelle machine est équipée de Windows 8 x64 avec Office 2013 et Visual Studio 2012.

En ouvrant ma solution sur VS2012, dans la nouvelle machine, il me donne une erreur de chargement du projet :

Impossible de créer le projet parce que l'application associée à ce type de type de projet n'est pas installée sur cet ordinateur. Vous devez installer l'application l'application Microsoft Office qui est associée à ce type de projet type.

Je pense que c'est dû à la mise à jour d'Office. Je ne veux pas revenir à Office 2010, sauf si c'est vraiment nécessaire.

Avez-vous une suggestion ?

Meilleures salutations, jpsfs

10voto

BrainSlugs83 Points 1336

Ma solution

Ok, donc après avoir beaucoup tapé ma tête contre le mur -- en découvrant que les propriétés msbuild, les conditions, et les inclusions de projet ne fonctionnent pas pour/dans la section ProjectExtensions, j'ai trouvé un hack supplémentaire qui fait que mon .csproj fonctionne dans Visual Studio 2013 [Update 3] que le développeur ait Office 2010 ou Office 2013 installé (c'est détaillé dans le deuxième point ci-dessous -- qui n'est pas requis pour le même comportement dans VS 2010, YMMV pour VS 2012).

Pour que votre projet fonctionne de cette façon, vous devez procéder comme suit trois des choses :

  • Modifiez à la main votre fichier .csproj et trouvez toutes les références de l'assemblage d'interopérabilité bureautique - assurez-vous que la version est définie comme étant la version "14.0.0.0" (par opposition à "15.0.0.0") et que l'élément enfant "SpecificVersion" est présent et défini comme étant "False".

  • Dans le cadre du projet \ProjectExtensions\VisualStudio\FlavorProperties\ProjectProperties trouve la paire attribut/valeur "OfficeVersion" et la supprime (de sorte que l'attribut qui se lit comme suit OfficeVersion="14.0" -- supprimer cela). -- Laissez tous les autres 14.0s intacts, si quelque chose a été changé en 15.0, rétrogradez-le en 14.0 (et encore une fois, si c'est une référence, mettez SpecificVersion à false). -- Ne vous souciez pas de changer les GUIDs, laissez-les tels quels !

  • À ce stade, la solution s'ouvrira et se compilera sur les machines qui exécutent Visual Studio 2013, qu'elles aient Office 2010 ou Office 2013. -- Mais elle ne sera pas commencer la solution sur des machines exécutant Office 2013. Pour corriger cela :

    • Ouvrir regedit et naviguer dans HKLM \Software\Microsoft\Office\
    • Exportez l'ensemble de la branche 15.0 dans un fichier .reg.
    • Ouvrez le fichier dans le bloc-notes et remplacez toutes les occurrences de "15.0" dans le chemin du registre par "14.0".
    • Enregistrez à nouveau le fichier (assurez-vous de l'enregistrer en unicode).
    • Importez le fichier et redémarrez Visual Studio. -- Cela vous permettra de commencer à déboguer avec Office 2013.

Une autre chose à garder à l'esprit -- surtout si vous utilisez EmbedInteropTypes, assurez-vous que lorsque vous faites votre build de release / publication, vous le faites à partir d'une machine avec Office 2010 (et non 2013) installé, de sorte que l'assemblage publié est construit contre les bibliothèques spécifiques d'Office 2010. -- Cela vous permettra de maintenir la compatibilité ascendante et descendante entre les deux versions.

Encore une fois, cela a fonctionné pour moi pour un complément de Word - pour un complément d'Excel YMMV.

Réponse originale (peut contenir des détails utiles pour les autres)

J'ai mentionné dans les commentaires ci-dessus que j'ai le problème opposé - VS 2013 Update 3 met à jour de force mes projets si l'utilisateur a installé Office 2013.

Vous pouvez essayer d'installer VS 2013 Update 3 (même temporairement, disons dans une VM) et la dernière version de VSTO 2012 / 2013, et d'ouvrir le projet, cela devrait forcer la mise à jour du vôtre également. Je sais que vous utilisez Excel, et que j'utilise Word, mais la section qu'il met à jour :

Ancien .csproj XML :

<Project ...>
  ...
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{BAA0C2D2-18E2-41B9-852F-F413020CAA33}">
        <ProjectProperties HostName="Word" HostPackage="{20A848B8-E01F-4801-962E-25DB0FF57389}" OfficeVersion="14.0" VstxVersion="4.0" ApplicationType="Word" Language="cs" TemplatesPath="VSTOTemplates" DebugInfoExeName="#Software\Microsoft\Office\14.0\Word\InstallRoot\Path#WINWORD.EXE" DebugInfoCommandLine="/w" AddItemTemplatesGuid="{51063C3A-E220-4D12-8922-BDA915ACD783}" />
        <Host Name="Word"... />
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  ...
</Project>

Nouveau .csproj XML :

<Project ...>
  ...
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{BAA0C2D2-18E2-41B9-852F-F413020CAA33}">
        <ProjectProperties HostName="Word" HostPackage="{29A7B9D7-A7F1-4328-8EF0-6B2D1A56B2C1}" OfficeVersion="15.0" VstxVersion="4.0" ApplicationType="Word" Language="cs" TemplatesPath="VSTOTemplates" DebugInfoExeName="#Software\Microsoft\Office\15.0\Word\InstallRoot\Path#WINWORD.EXE" DebugInfoCommandLine="/w" AddItemTemplatesGuid="{51063C3A-E220-4D12-8922-BDA915ACD783}" />
        <Host Name="Word"... />
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  ...
</Project>

Il me semble que les deux choses qui ont changé sont :

  • Le chemin d'accès au registre de 14.0 à 15.0 (ce qui, dans VS 2010, était facile à contourner - il suffisait de créer un chemin d'accès au registre correspondant à 14.0 qui pointait vers l'endroit où vous aviez installé Word 2013 et tout fonctionnait bien).

  • L'ID CLS du paquet hôte. Je ne sais pas ce qu'ils sont pour Excel, mais vous pouvez probablement les chercher. -- Je préfère ne pas modifier l'ID CLS du projet archivé, afin que les développeurs qui développent et testent le projet avec Word 2010 puissent continuer à le faire, tout comme ceux qui développent et testent avec Word 2013.

En outre, il semble que deux références aient été mises à jour de 14.0 à 15.0. Il s'agit d'une erreur majeure, car nous ne voulons construire et intégrer que les types d'interopérabilité 2010 (ceux-ci fonctionnent bien en 2013, mais nous ne voulons pas accéder accidentellement à une propriété réservée à 2013 qui ne fonctionnerait pas en 2010...).

Les deux références qui ont été mises à jour sont "Microsoft.Office.Interop.Word" et "Office".

Edit : Il semble que je puisse définir ces deux références à SpecificVersion : False, puis modifier manuellement le fichier XML pour les ramener à "14.0.0.0" (la version semble être grisée dans le menu normal).

1voto

PHC Points 88

J'ai eu le même problème en essayant de créer un projet de document Word dans VS 2013 à partir d'un projet Word 2010 existant.

Ma solution a été d'utiliser une version antérieure de .net framework (version 4 au lieu de la version 4.5). Lorsque j'ai sélectionné cela dans l'assistant de création de projet, j'obtiens des options pour sélectionner les applications Office 2010.

Je suis un novice en matière de .net mais cela semble fonctionner correctement pour moi.

0voto

MerlinXL Points 1

Dans le menu VS, sélectionnez :
Projet Propriétés Débogage

Remplacer Action de démarrage par Démarrage du programme externe Saisissez l'adresse du fichier Excel.exe

Quelque chose comme C:\Program Archivos \Microsoft Bureau \Office15\EXCEL.EXE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X