2016-07-07 1 views
1

Je ne connais pas encore les extensions VS d'extension, et je trouve des informations sur le sujet, comme le démêlage de 3 pelotes de fil. J'ai lu pas mal de choses sur le site MSDN, ainsi que de nombreuses recherches google ratées.Dupliquer l'extension Visual Studio pour une seule langue

Mon but est d'écrire une extension Visual Studio (en utilisant MEF et MPF) pour améliorer le support d'un langage, qui a été créé par un tiers. La 3ème partie a déjà une extension VS, qui supporte le débogage ainsi que le minimum d'Intellisense, et fournit la colorisation. Je ne veux pas perdre leur support de débogage, mais je veux améliorer tous les autres aspects de l'expérience. D'après ce que je comprends, une langue donnée (type de contenu) ne peut être prise en charge que par un LanguageService et/ou un ensemble de services d'édition via le MEF (colorizing, intellisense, etc.). Est-ce correct? Est-il possible de remplacer leur Intellisense existant, et d'ajouter d'autres fonctionnalités?

+0

Note: Un bon décompilateur .NET (j'aime dotPeek) est votre meilleur ami lorsque vous travaillez avec des extensions VS. Un bon morceau de VS est écrit en code managé et peut être décompilé pour comprendre certains des rouages ​​internes les plus obscurs, sans parler de ceux de la 3ème partie dont vous parlez. – Cameron

Répondre

0

Oui, avec un peu d'effort, vous pouvez contourner l'enregistrement de leur service de langue et enregistrer votre propre pour les mêmes extensions de fichier. Le service de langage est presque indépendant du moteur de débogage (je dis presque parce que quelques petites choses comme le placement du point de rupture au moment du design passent par certains des objets du service de langage, mais ce n'est pas très important). Je suggère de supplanter leur service de langue avec le vôtre complètement, ce qui sera beaucoup plus simple que d'essayer d'augmenter le leur sans le casser, surtout sans avoir accès à leur source pour faire des changements.

La plupart des enregistrements sont liés par des entrées dans le registre, par ex. au HKCU\Software\Microsoft\VisualStudio\14.0_Config\. Ceci est non true des composants MEF, mais les composants MEF ont tendance à être filtrés par type de contenu, qui est défini par le service de langue, donc ça devrait aller tant que vous définissez un type de contenu différent dans votre service de langue des trucs à ça.

Vous pouvez enregistrer votre service linguistique pour les mêmes extensions de fichier, mais avec une priorité plus élevée (via l'attribut ProvideEditorExtension de votre package de services linguistiques). Ensuite, tout dépend de votre service de langue et vous n'avez pas à vous soucier de leur présence (à condition de se comporter avec des types de contenu qui ne sont pas les siens, ce qui devrait être le cas).

Enfin, bonne chance! Ecrire un (bon) service de langue à partir de zéro peut être un long voyage :-)

+0

Si vous avez des questions de suivi, ajoutez un lien dans les commentaires ici car je ne consulte pas souvent l'étiquette de question [vsix] ;-) – Cameron

+0

Merci @Cameron. Jusqu'à présent, il semble que LanguageService n'est pas du tout nécessaire lors de l'utilisation des composants MEF. Ils semblent se chevaucher, et je n'ai pas vu de fonctionnalités supplémentaires dans le LanguageService. Ai-je raison, ou ai-je oublié quelque chose? C'est probablement une question différente tous ensemble, mais vous avez répondu à mon OP. –

+0

À droite, MEF est orthogonal à un enregistrement de service de langue, mais beaucoup de services que vous voulez que votre service de langue ait sont exposés via des composants MEF (par exemple coloration syntaxique, achèvement). La plupart des composants MEF sont enregistrés avec un type de contenu spécifique, qui est le lien entre eux et le service de langue (qui définit ce type de contenu). Un service de langue par lui-même ne fait pas grand chose du tout; c'est tout ce qui se rattache à son type de contenu qui fait le gros du travail. Désolé pour mon temps de réponse lent! – Cameron