Je construis quelque chose de similaire à Server Explorer pour Apache CouchDB. Une des choses nécessaires est de pouvoir éditer les définitions de vue CouchDB qui dans CouchDB sont des fonctions JavaScript. Comment puis-je faire en sorte que Visual Studio utilise mon objet pour récupérer et enregistrer le contenu de la fonction JavaScript, mais utilise toujours le reste - Je suis content de l'éditeur lui-même et n'ai pas l'intention d'écrire mon propre éditeur/langage , etc. ce dernier serait beaucoup plus d'efforts que ce que ce projet garantitVisual Studio - Modifier le code source situé dans une base de données
Modifier
Après plus de creuser, je suis toujours bloqué. Voici ce que je sais: IVsUIShellOpenDocument
interface fournit une méthode OpenStandardEditor
qui peut être utilisé pour ouvrir l'éditeur Visual Studio standard. En tant que l'un des paramètres, cette méthode prend un pointeur vers l'interface IUnknown de l'objet de données de document. Cet objet est supposé implémenter plusieurs interfaces décrites dans de nombreux endroits partout dans le MSDN. Visual Studio SDK fournit également un exemple d'implémentation de l'objet de données de document VsTextBufferClass
. Je peux créer une instance de cette classe et quand je passe le pointeur à l'instance au OpenStandardEditor
je peux voir mon éditeur et cela semble fonctionner.
Lorsque je tente de mettre en œuvre ma propre classe implémentant les mêmes interfaces (IVsTextBuffer
, VsTextBuffer
, IVsTextLines
) OpenStandardEditor
méthode retourne succès, mais VS bombes sur appel sur editor.Show()
avec une violation d'accès.
Je soupçonne que VsTextBufferClass implémente également d'autres interfaces mais pas en mode C# mais plutôt dans la bonne vieille façon COM. Je ne sais pas lequel (s).
Des pensées?
Ceci est certainement une option, je ne l'aime tout simplement pas, car il va créer toutes sortes de problèmes de synchronisation – mfeingold