Nouveautés d’extensibilité de Visual Studio 2017Changes in Visual Studio 2017 extensibility

Avec Visual Studio 2017, nous offrons un expérience d’installation de Visual Studio plus rapide et léger afin de réduire l’impact de Visual Studio sur les systèmes de l’utilisateur, tout en donnant aux utilisateurs un plus grand choix sur les charges de travail et les fonctionnalités qui sont installés.With Visual Studio 2017, we're offering a faster, lighter-weight Visual Studio installation experience that reduces the impact of Visual Studio on user systems, while giving users greater choice over the workloads and features that are installed. Pour prendre en charge ces améliorations, nous avez apporté des modifications au modèle d’extensibilité et certaines modifications avec rupture effectuées à l’extensibilité de Visual Studio.To support these improvements, we've made changes to the extensibility model, and have made some breaking changes to Visual Studio extensibility. Ce document décrit les détails techniques de ces modifications, et ce qui peut être fait pour les résoudre.This document will describe the technical details of these changes, and what can be done to address them. Veuillez noter que certaines informations constituent les détails d’implémentation de point-à-temps et qu’il peuvent être modifiées ultérieurement.Please note that some information is point-in-time implementation details and may be changed later.

Modifications affectant l’installation et du format VSIXChanges affecting VSIX format and installation

Nous introduisons la v3 VSIX format (version 3) pour prendre en charge de l’expérience d’installation légère.We're introducing the VSIX v3 (version 3) format to support the light-weight installation experience.

Modifications du format VSIX sont les suivantes :Changes to the VSIX format include:

  • Déclaration des conditions préalables d’installation.Declaration of setup prerequisites. Pour remettre la promesse d’un léger et rapide-installation de Visual Studio, le programme d’installation propose désormais des options de configuration supplémentaires aux utilisateurs.To deliver on the promise of a lightweight, fast-installing Visual Studio, the installer now offers more configuration options to users. Par conséquent, pour vous assurer que les fonctionnalités et les composants requis par une extension sont installés, extensions devrez déclarent leurs dépendances.As a result, to ensure that the features and components required by an extension are installed, extensions will need to declare their dependencies.
    • Le programme d’installation de Visual Studio 2017 proposera automatiquement d’acquérir et installer les composants nécessaires pour l’utilisateur dans le cadre de l’installation de votre extension.The Visual Studio 2017 installer will automatically offer to acquire and install the necessary components for the user as part of installing your extension.
    • Les utilisateurs seront également avertis lorsque vous tentez d’installer une extension qui n’a pas créée à l’aide du nouveau format VSIX v3, même s’ils ont été marqués dans leur manifeste en ciblant la version 15.0.Users will also be warned when trying to install an extension that was not built using the new VSIX v3 format, even if they have been marked in their manifest as targeting version 15.0.
  • Capacités améliorées pour le format VSIX.Enhanced capabilities for the VSIX format. Pour répondre à une installation low-impact de Visual Studio qui prend également en charge les installations côte à côte, nous n’en avez plus enregistrer la plupart des données de configuration dans le Registre système et ont été déplacés hors du GAC, les assemblys spécifique de Visual Studio.To deliver on a low-impact install of Visual Studio that also supports side-by-side installs, we no longer save most configuration data to the system registry and have moved Visual Studio-specific assemblies out of the GAC. Nous avons également augmenté les fonctionnalités du format VSIX et moteur d’installation VSIX, ce qui vous permet d’utiliser plutôt que des EXE ou un MSI pour installer vos extensions pour certains types d’installation.We also increased the capabilities of the VSIX format and VSIX installation engine, allowing you to use it rather than an MSI or EXE to install your extensions for some installation types.

    Les nouvelles fonctionnalités sont les suivantes :The new capabilities include:

    • Inscription dans l’instance spécifiée de Visual Studio.Registration into the specified Visual Studio instance.
    • Installation en dehors de la dossier extensions.Installation outside the extensions folder.
    • Détection de l’architecture processeur.Detection of processor architecture.
    • Dépendance sur le langage séparées par des modules linguistiques.Dependence on language-separated language packs.
    • Installation avec prise en charge NGEN.Installation with NGEN support.

Création d’une extension pour Visual Studio 2017Building an extension for Visual Studio 2017

Concepteur d’outils pour la création de la nouvelle le format de manifeste VSIX v3 est maintenant disponible dans Visual Studio 2017.Designer tooling for authoring of the new VSIX v3 manifest format is now available in Visual Studio 2017. Consultez le document Comment : migrer des projets d’extensibilité vers Visual Studio 2017 pour plus d’informations sur l’utilisation des outils concepteurs ou effectuer des mises à jour manuelles au projet et le manifeste pour développer des extensions VSIX v3.See the accompanying document How to: Migrate extensibility projects to Visual Studio 2017 for details on using the designer tools or making manual updates to the project and manifest to develop VSIX v3 extensions.

Modification : Chemin de données utilisateur Visual StudioChange: Visual Studio user data path

Auparavant, une seule installation de chaque version majeure de Visual Studio peut exister sur chaque ordinateur.Previously, only one installation of each major release of Visual Studio could exist on each machine. Pour prendre en charge les installations côte à côte de Visual Studio 2017, plusieurs chemins de données utilisateur pour Visual Studio peuvent exister sur l’ordinateur de l’utilisateur.To support side-by-side installations of Visual Studio 2017, multiple user data paths for Visual Studio may exist on the user's machine.

Code qui s’exécute au sein du processus de Visual Studio doit être mis à jour pour utiliser le Gestionnaire de paramètres Visual Studio.Code running inside the Visual Studio process should be updated to use the Visual Studio Settings Manager. Code qui s’exécute en dehors du processus Visual Studio peut trouver le chemin d’accès de l’utilisateur d’une installation de Visual Studio spécifique en suivant les conseils donnés ici.Code running outside of the Visual Studio process can find the user path of a specific Visual Studio installation by following the guidance here.

Modification : Global Assembly Cache (GAC)Change: Global Assembly Cache (GAC)

La plupart des assemblys principaux de Visual Studio ne sont plus installés dans le GAC.Most Visual Studio core assemblies are no longer installed into the GAC. Les modifications suivantes ont été apportées afin que code s’exécutant dans le processus de Visual Studio peut toujours trouver les assemblys requis lors de l’exécution.The following changes were made so that code running in Visual Studio process can still find required assemblies at runtime.

Note

[INSTALLDIR] ci-dessous fait référence au répertoire racine d’installation de Visual Studio.[INSTALLDIR] below refers to the installation root directory of Visual Studio. VSIXInstaller.exe sera remplir automatiquement, mais pour écrire le code de déploiement personnalisé, veuillez lire recherche de Visual Studio.VSIXInstaller.exe will automatically populate this, but to write custom deployment code, please read locating Visual Studio.

  • Assemblys qui ont été installés uniquement dans le GAC :Assemblies that were only installed into the GAC:
    • Ces assemblys sont maintenant installés sous * [INSTALLDIR] \Common7\IDE*, [INSTALLDIR] \Common7\IDE\PublicAssemblies ou [INSTALLDIR] \Common7\IDE\PrivateAssemblies.These assemblies are now installed under *[INSTALLDIR]\Common7\IDE*, [INSTALLDIR]\Common7\IDE\PublicAssemblies or [INSTALLDIR]\Common7\IDE\PrivateAssemblies. Ces dossiers font partie de chemins de détection du processus Visual Studio.These folders are part of the Visual Studio process's probing paths.
  • Assemblys qui ont été installés dans un chemin d’accès non détection et dans le GAC :Assemblies that were installed into a non-probing path and into the GAC:

    • La copie dans le GAC a peut-être été retirée le programme d’installation.The copy in the GAC was removed from setup.
    • Un .pkgdef fichier a été ajouté pour spécifier une entrée de base de code pour l’assembly.A .pkgdef file was added to specify a code base entry for the assembly.

      Exemple :For example:

      [$RootKey$\RuntimeConfiguration\dependentAssembly\codeBase\{UniqueGUID}]
      "name"="AssemblyName" "codeBase"="$PackageFolder$\AssemblyName.dll"
      "publicKeyToken"="Public Key Token"
      "culture"="neutral"
      "version"=15.0.0.0
      

      Lors de l’exécution, le sous-système de pkgdef Visual Studio fusionne ces entrées dans le fichier de configuration du runtime du processus Visual Studio (sous [VSAPPDATA]\devenv.exe.config) en tant que <codeBase> éléments.At runtime, the Visual Studio pkgdef subsystem will merge these entries into the Visual Studio process's runtime configuration file (under [VSAPPDATA]\devenv.exe.config) as <codeBase> elements. Il s’agit de la méthode recommandée pour vous permettre du processus de Visual Studio de trouver votre assembly, car elle évite d’effectuer une recherche dans les chemins d’accès de détection.This is the recommended way to let the Visual Studio process find your assembly, because it avoids searching through probing paths.

Réagir à cette modification avec ruptureReacting to this breaking change

  • Si votre extension s’exécute au sein du processus de Visual Studio :If your extension is running within the Visual Studio process:
    • Votre code sera en mesure de trouver les assemblys principaux de Visual Studio.Your code will be able to find Visual Studio core assemblies.
    • Envisagez d’utiliser un .pkgdef fichier pour spécifier un chemin d’accès à vos assemblys, si nécessaire.Consider using a .pkgdef file to specify a path to your assemblies if necessary.
  • Si votre extension s’exécute en dehors du processus de Visual Studio :If your extension is running outside the Visual Studio process:
    • Prendre en compte la recherche d’assemblys principaux de Visual Studio sous * [INSTALLDIR] \Common7\IDE*, [INSTALLDIR] \Common7\IDE\PublicAssemblies ou [INSTALLDIR] \Common7\IDE\PrivateAssembliesà l’aide du résolveur de fichier ou l’assembly de configuration.Consider looking for Visual Studio core assemblies under *[INSTALLDIR]\Common7\IDE*, [INSTALLDIR]\Common7\IDE\PublicAssemblies or [INSTALLDIR]\Common7\IDE\PrivateAssemblies using configuration file or assembly resolver.

Modification : Réduire l’impact sur le RegistreChange: Reduce registry impact

Inscription de COM globaleGlobal COM registration

  • Auparavant, Visual Studio installé de clés de Registre dans les ruches HKEY_CLASSES_ROOT et HKEY_LOCAL_MACHINE pour prendre en charge d’inscription COM native.Previously, Visual Studio installed many registry keys into the HKEY_CLASSES_ROOT and HKEY_LOCAL_MACHINE hives to support native COM registration. Pour éviter cet impact, Visual Studio utilise désormais l’Activation sans inscription pour les composants COM.To eliminate this impact, Visual Studio now uses Registration-Free Activation for COM components.
  • Par conséquent, la plupart des TLB / OLB / fichiers DLL sous % ProgramFiles (x86) %\Common Files\Microsoft Shared\MSEnv ne sont plus installés par défaut par Visual Studio.As a result, most TLB / OLB / DLL files under %ProgramFiles(x86)%\Common Files\Microsoft Shared\MSEnv are no longer installed by default by Visual Studio. Ces fichiers sont maintenant installés sous [INSTALLDIR] avec des manifestes Registration-Free COM correspondants utilisés par le processus hôte de Visual Studio.These files are now installed under [INSTALLDIR] with corresponding Registration-Free COM manifests used by the Visual Studio host process.
  • Par conséquent, le code externe qui s’appuie sur l’inscription de COM globale pour les interfaces COM Visual Studio sera ne trouve plus ces inscriptions.As a result, external code that relies on global COM registration for Visual Studio COM interfaces will no longer find these registrations. Code qui s’exécute à l’intérieur du processus Visual Studio ne verrez pas de différence.Code running inside Visual Studio process will not see a difference.

Registre de Visual StudioVisual Studio registry

  • Auparavant, Visual Studio installé de clés de Registre dans le système HKEY_LOCAL_MACHINE et HKEY_CURRENT_USER ruches sous une clé spécifique de Visual Studio :Previously, Visual Studio installed many registry keys into the system's HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER hives under a Visual Studio-specific key:
    • HKLM\Software\Microsoft\VisualStudio{Version}: les clés de Registre créés par les programmes d’installation MSI et extensions de machine.HKLM\Software\Microsoft\VisualStudio{Version}: Registry keys created by MSI installers and per-machine extensions.
    • HKCU\Software\Microsoft\VisualStudio{Version}: clés de Registre créées par Visual Studio pour stocker des paramètres propres à l’utilisateur.HKCU\Software\Microsoft\VisualStudio{Version}: Registry keys created by Visual Studio to store user-specific settings.
    • HKCU\Software\Microsoft\VisualStudio{Version} _Config: une copie de la clé de Visual Studio HKLM ci-dessus, ainsi que les clés de Registre fusionné à partir de .pkgdef fichiers par les extensions.HKCU\Software\Microsoft\VisualStudio{Version}_Config: A copy of Visual Studio HKLM key above, plus the registry keys merged from .pkgdef files by extensions.
  • Pour réduire l’impact sur le Registre, Visual Studio utilise désormais le RegLoadAppKey (fonction) pour stocker les clés de Registre dans un fichier binaire privé sous [VSAPPDATA]\privateregistry.bin.To reduce the impact on the registry, Visual Studio now uses the RegLoadAppKey function to store registry keys in a private binary file under [VSAPPDATA]\privateregistry.bin. Uniquement un très petit nombre de clés de Visual Studio spécifiques reste dans le Registre système.Only a very small number of Visual Studio-specific keys remain in the system registry.

  • Code existant en cours d’exécution au sein du processus de Visual Studio n’est pas affecté.Existing code running inside the Visual Studio process is not impacted. Visual Studio redirige toutes les opérations de Registre sous la clé HKCU Visual Studio-spécifique au Registre privé.Visual Studio will redirect all registry operations under the HKCU Visual Studio-specific key to the private registry. Lire et écrire à d’autres emplacements de Registre continue à utiliser le Registre système.Reading and writing to other registry locations will continue to use the system registry.

  • Code externe doit charger et lire à partir de ce fichier pour les entrées de Registre de Visual Studio.External code will need to load and read from this file for Visual Studio registry entries.

Réagir à cette modification avec ruptureReacting to this breaking change

  • Code externe doit être converti pour utiliser l’activation sans inscription pour les composants COM et.External code should be converted to use Registration-Free activation for COM components as well.
  • Composants externes pour trouver l’emplacement de Visual Studio en suivant les conseils donnés ici.External components can find the Visual Studio location by following the guidance here.
  • Nous recommandons d’utilisent des composants externes les Gestionnaire de paramètres externe au lieu de lecture/écriture directement aux clés de Registre de Visual Studio.We recommend that external components use the External Settings Manager instead of reading/writing directly to Visual Studio registry keys.
  • Vérifiez si les composants à l’aide de votre extension a peut-être implémenté une autre technique pour l’inscription.Check whether the components your extension is using may have implemented another technique for registration. Par exemple, les extensions de débogueur peuvent être en mesure de tirer parti de la nouvelle msvsmon enregistrement JSON-fichier COM.For example, debugger extensions may be able to take advantage of the new msvsmon JSON-file COM registration.