3 votes

problème lors de la création d'un module complémentaire ssms

J'essaie de créer un module complémentaire pour SSMS 2008 et/ou 2008 R2, mais je me heurte tout de suite à un problème.

J'arrive à faire fonctionner mon module complémentaire et, au démarrage de SSMS, à faire en sorte qu'il affiche simplement une boîte de message.

Cependant, après avoir téléchargé divers exemples de code, lorsque j'essaie de faire référence à Microsoft.SqlServer.Management.UI.VSIntegration.ServiceCache, j'obtiens une exception de référence nulle :

Commands2 commands = (Commands2)ServiceCache.ExtensibilityModel.Commands;

Je rencontre ce problème lorsque j'utilise SSMS 2008 ou SSMS 2008 R2. Je travaille sur Visual Studio 2010.

C'est un peu frustrant car j'ai envie d'en savoir plus sur les modules complémentaires de SSMS, mais je ne parviens pas à dépasser les quelques exemples qui existent.

Tout conseil ou astuce sera apprécié.

Merci

5voto

marc_s Points 321990

Karl, je ne connais pas votre problème concret ici, mais en répondant à une autre question, je suis tombé sur un tas d'articles et de liens sur l'écriture de plug-ins SSMS - peut-être que l'un d'eux vous sera utile :

Certaines informations peuvent être trouvées ici :

3voto

TTRider Points 333

ServiceCache n'est pas fiable - d'une version à l'autre, il prend de moins en moins en charge et il est probable qu'il disparaîtra un jour ou l'autre.

Si vous écrivez un add-in SSMS, vous pouvez accéder aux internes en accédant à VS ApplicationModel. Quelque chose comme ça :

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
        {
            _addInInstance = (AddIn)addInInst;
            _applicationObject = _addInInstance.DTE as DTE2;

_applicationObject contient des commandes et d'autres éléments intéressants.

Veuillez noter que application de OnConnection a un objet incorrect passé dans l'argument. C'est pourquoi vous devez utiliser cette ligne pour obtenir le bon objet : _applicationObject = _addInInstance.DTE as DTE2 ;

1voto

MarkPm Points 134

Je me débats avec ça depuis un moment.

J'ai un add-in qui fonctionne dans sql 2008 - écrit en VS2008.

J'ai mis à jour le projet vers VS2010 et j'ai commencé à travailler sur le fonctionnement de l'add-in sql 2008 r2 - je n'ai pas pu le faire fonctionner pour l'amour et l'argent.

J'ai essayé beaucoup de choses différentes ; * supprimer et réinsérer toutes les références. * changer le cadre cible. Pas une saucisse.

Rien ne fonctionnait.... Jusqu'à ce que je retourne à VS2008 - j'ai fait les changements. (voir le blog de Jonathan Kehayias : https://www.sqlskills.com/blogs/jonathan/sql-server-2012-extended-events-add-in-to-manage-2008r2-instances/ )

Vive les nouvelles versions !

1voto

Joc02 Points 63

Ok, j'ai trouvé la solution, le problème est entre CLR2.0 et CLR 4.0.

Source : http://blogs.msdn.com/b/mshneer/archive/2010/03/19/com-shim-wizards-for-vs-2010.aspx

Compléments de débogage ciblant le CLR 2.0 dans Visual Studio 2010

J'ai eu quelques problèmes pour déboguer les add-ins si ceux-ci étaient chargés dans le CLR 2.0. I appuyais sur F5, Excel démarrait et mon add-in s'exécutait mais les points d'arrêt n'étaient pas atteints. Donc je voulais partager ce qui se passe et comment configurer votre environnement de telle sorte de manière à ce que l'expérience F5 ne soit pas complètement cassée.

Il n'y a pas de magie dans la façon dont j'ai l'habitude de déboguer le module d'extension partagé que ce soit avec ou sans shimming. Je place un point d'arrêt dans la méthode OnConnection dans le fichier Connect.cs, j'ouvre les propriétés du projet du projet, aller dans la section Debug, sélectionner l'option "Start External Program" et j'indique le chemin complet de mon application Office (par exemple, " C:\Program Fichiers \Microsoft Bureau \Office12\EXCEL.EXE "). Ensuite, je clic droit sur le nœud du projet dans la fenêtre Solution Explorer et je sélectionne "Set As Startup Project". Lorsque j'appuie sur F5, mon point d'arrêt est atteint.

Dans Visual Studio 2010, le point d'arrêt n'est pas atteint si mon add-in est chargé dans le répertoire CLR 2.0. Ce qui se passe, c'est que débogueur ne peut pas s'attacher au CLR 4.0 et au CLR 2.0. et CLR 2.0 - il doit en fait savoir avant le fait savoir avant le fait s'il doit utiliser le moteur de débogage CLR 2.0 ou le moteur de débogage CLR 4.0. Lorsque vous appuyez sur la touche F5, le débogueur essaie de deviner quel CLR sera lancé dans le processus. L'heuristique est basée sur la lecture du fichier .config de l fichier .config de l'EXE où la version la version du runtime est généralement spécifiée et si le fichier .config n'est pas trouvé le débogueur lance le CLR 4.0. moteur de débogage. Comme nous le savons tous les applications Office ne sont pas liées à à une version particulière du CLR, donc l'heuristique échoue lamentablement.

Il y a en fait deux façons de procéder l'une consiste à mettre un fichier .exe.config à côté de le fichier .exe lui-même, par exemple lors du débogage de Excel 2007, je vais créer Excel.exe.config et le laisser dans le dossier " C:\Program Fichiers \Microsoft Bureau \Office12 dossier ".

Mais ma façon préférée de traiter avec est différente. Dans l'explorateur de solutions Explorer, je fais un clic droit sur le nœud de ma nœud de solution et sélectionner "Add" -> "Projet existant" et ouvrir " C:\Program Fichiers \Microsoft Bureau \Office12\EXCEL.EXE ". Ensuite, je vais faire un clic droit sur ce nouveau ajouté et sélectionner "Set As Startup de démarrage". Ensuite, je vais ouvrir les propriétés de ce projet et je vais définir la propriété "Debugger Type" sur "Managed (v2.0, v1.1, v1.0)". Maintenant, je F5 et le point d'arrêt que j'ai mis dans la méthode OnConnection sera atteint.

0voto

Joc02 Points 63

J'ai le même problème. Je pense que c'est lié au Framework

Avec Framework 3.5

ServiceCache.ExtensibilityModel n'est pas null

Avec Framework 4.0

"ServiceCache.ExtensibilityModel" est null

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