如何创建SQL Server Management Studio 18(SSMS)扩展

目录

介绍

如果您已经阅读了创建自己的SQL Server Management Studio 17(SSMS)扩展教程

背景

要求

文件>新项目

转向SSMS

然后去哪儿?


介绍

这将是有关如何创建自己的SQL Server Management Studio 18扩展(从现在开始的SSMS)的分步指南。它将仅涵盖入门所需的基本设置和步骤。这是对创建自己的SQL Server Management Studio 17(SSMS)扩展教程的更新,如果您已经熟悉那篇,那么也不需要阅读本篇,因为那篇的大部分内容仍然适用。即使这是一个更新,它将完全覆盖所有步骤,因此那些没有阅读过那篇步骤的人仍然可以开始单独从本教程创建自己的扩展。因此,如果您是新来的,则应跳过下一部分并转到背景或直接进入要求,如果您不想为我编写本教程的原因而烦恼。如果您阅读上一篇教程并且只是想了解更改的内容,那么您应该只阅读下一节,其中介绍了为之前版本的SSMS开发扩展与此篇之间的差异。

如果您已经阅读了创建自己的SQL Server Management Studio 17SSMS)扩展教程

从那时起,只有一些事情发生了变化,所以如果你已经熟悉了上面的教程,你应该浏览一下这个列表,然后就可以开始了。

1、SSMS可执行文件的默认安装位置(运行和调试扩展所需)现在是:

C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\

 2、extensions文件夹的位置现在是:

C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions\

 3、现在,日志文件的位置是:

C:\Users\Username\AppData\Roaming\Microsoft\AppEnv\15.0\

 4、不再需要解决方法(将前一教程的一半渲染为完全没用)

MicrosoftSSMS团队最终决定取消限制,仅允许将带有白名单包ID的扩展加载到SSMS中。现在你只需开发你的扩展,它就可以工作了。

5、这次将使用Visual Studio 2017

因为更新的SSMS 18现在基于VS 2017 Isolated Shell

关于最后一点需要注意的另一点是,由于程序集版本不兼容,使用Visual Studio 2015开发的扩展可能无法在SSMS 18上正常工作。解决此问题的最简单方法是在VS 2017中创建一个新项目,引用新程序集(即相同程序集的较新版本)并将所有扩展代码移动到新解决方案中并尝试从那里运行它。我最近遇到了从SSMS 18上的Visual Studio 2015运行和调试扩展的问题。在VS 2017中创建并运行的新项目(带有对相同程序集的较新版本的新引用)的代码和调试解决了这个问题。

背景

随着SSMS 18即将到来(RC1在撰写本文时可用),我决定看看这个版本的更新日志(可在此处获得),希望看到完全支持黑暗主题(没有运气)或其他有趣的东西,这这个注释引起了我的注意:

引用:

开发SSMS扩展不再需要包ID

你看,到目前为止,每个尝试开发SSMS扩展的人都知道这是一个痛苦的开始。最大的原因是SSMS团队设置的约束不允许在启动时将任何非白名单扩展加载到SSMS中。因此,我们不得不做一些令人不快的黑客来解决这个限制并让我们的扩展工作。事情变得更加困难的是完全缺乏关于扩展SSMS的支持和文档,据我所知,这仍然没有改变。在我可以找到的官方文档中最后提到SSMS的可扩展性是在SQL Server 2014的页面中(可在此处获得),其中说明:

引用:

SQL Server Management Studio构建于Visual Studio Isolated Shell之上,它本身支持可扩展性(加载项/插件)。
可以使用Visual Studio可扩展性服务来表示SQL Server Management Studio中的自定义功能; 
但是,不支持这种可扩展性。

尽管取消白名单检查的决定使事情变得更容易,但据我所知,扩展仍然没有得到官方支持,我们仍然需要在网上挖掘扩展SSMS的资源,这些资源很少见。幸运的是,因为它们共享相同的孤立shell,创建Visual Studio扩展的教程有时会有所帮助,并且有很多这样的帮助(这里提供官方文档)。缺乏官方文档和在线资源是创建本教程的原因。

要求

由于SSMS 18基于VS 2017 Isolated Shell,因此我建议在创建扩展时使用此版本的Visual Studio。由于程序集版本的兼容性,使用其他版本的Visual Studio(甚至更新的版本)是一个非常头疼的过程,我强烈反对这一点。对于本教程,我将在全新安装的Windows 10上使用新安装的Visual Studio 2017SSMS 18 RC1。因此,如果这些步骤适用于我,我几乎可以保证只要你使用上面列出的软件和版本,它们就可以为你工作。除了确保安装Visual Studio扩展开发之外,本节中没有什么可说的,当安装Visual Studio的工具集时,因为您需要安装此工具集以在创建新项目时获取可扩展性部分和VSIX项目类型。

如果您没有安装此工具集,您仍可以稍后通过运行位于以下位置的Visual Studio Installer将其添加到Visual Studio

C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe

并在现有安装上点击修改 ”

文件>新项目

我们的SSMS扩展将作为Visual Studio扩展开始,稍后将转移到SSMS。要在Visual Studio中启动我们的项目,首先转到File> New> Project ...并选择Installed> Visual C> Extensibility部分中的VSIX Project模板。

让我们命名我们的项目HelloWorldSsms18Extension并点击OK

为了使我们的扩展实际上做某事,我们将在工具菜单中添加一个命令,方法是在解决方案资源管理器中右键单击我们的项目,然后选择添加>新项...

从这里,我们需要从Installed> Visual CItems> Extensibility> VSPackage部分中选择Custom Command项。让我们命名我们的命令为HelloWorldCommand并点击Add

所以,是的......那就是它。我们的扩展已经完成。为了测试它实际上是否正常工作以及我们可以调试它,我们将在HelloWorldCommand类的Execute方法中添加一个断点(位于HelloWorldCommand.cs文件中)并点击位于Visual Studio中的Play / Start(现在命名为Current Instance ... )按钮。

如果到目前为止一切顺利,点击开始按钮应该启动一个新的Visual Studio实例(称为实验实例),我们应该在工具菜单中看到我们的命令。如果这是您第一次运行实验实例,则可能需要等待一段时间,但一旦启动,我们就可以在其中找到我们的命令。

如果我们运行命令(通过单击它),我们可以看到我们的断点被命中(在Visual Studio的开发实例中),如果我们点击继续,我们的实验实例将返回到视图中,显示一个消息框,这正是我们命令的Execute方法中给定的代码所期望看到的。

我想微软忘记更新此消息的文本,因为该方法不再像以前版本的自定义命令(现在称为Execute)那样称为MenuItemCallback。您可以在上一个教程的屏幕截图中看到这一点。

我们现在可以关闭消息框和实验实例,返回我们的Visual Studio开发实例,更改消息框应显示的消息,并尝试再次运行它,以确保一切按预期工作。

在我们验证了我们的扩展加载并且工作正常并且我们可以无问题地调试之后,我们最终可以将我们的扩展从Visual Studio移动到SSMS

转向SSMS

如果我们想看到我们的扩展在SSMS中运行,我们需要做几件事。首先,我们希望在我们点击开始按钮而不是另一个Visual Studio 时加载SSMS 。要解决这个问题,我们需要通过在解决方案资源管理器中右键单击它并选择属性来转到我们项目的属性

属性窗口中,我们需要转到调试选项卡并将启动外部程序属性更改为

C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe

在调试扩展时使Visual Studio启动SSMS。这是SSMS 18的默认安装位置。如果这不是安装SSMS的位置,只需单击浏览按钮,找到计算机上的Ssms.exe可执行文件,然后单击打开。当我们在这里时,我们也可以更改命令行参数字段并将/log参数放入其中。这将使SSMS在运行时记录其活动,如果我们的扩展出现问题,它可以帮助我们排除故障。日志文件的位置是:

C:\Users\Username\AppData\Roaming\Microsoft\AppEnv\15.0\ActivityLog.xml

在我们进行了更改并点击保存,我们可以点击现在正确名称的开始按钮,看看SSMS是否以加载了我们的扩展名开始。

好的,SSMS确实开始了。让我们关闭连接到服务器窗口,检查我们的扩展是否在工具菜单中。

...我们得到了SSMS,但我们的扩展无处可寻。原因是我们的扩展名不在SSMS通常在启动时查找加载扩展名的文件夹中。该文件夹的位置是:

C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions\

要解决此问题,我们需要告诉Visual Studio在构建项目时将扩展文件复制到该位置。我们可以在项目属性窗口的VSIX选项卡中执行此操作,方法是选中VSIX内容复制到以下位置复选框,然后在下面的textbox输入SSMS扩展文件夹位置(以及扩展名的文件夹名称)。假设要创建的文件夹的名称将是HelloWorldSsms18Extension,使用该扩展名,textbox中的完整路径应该是:

C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions\HelloWorldSsms18Extension

保存更新的属性并再次点击开始

好的,出了点问题,因为现在Visual Studio甚至不会构建项目。

如果我们点击No并检查错误列表窗口中的错误,我们可以看到Visual Studio无法将扩展文件复制到提供的路径。这可以通过以管理员身份运行Visual Studio来轻松解决,因此关闭Visual Studio并再次运行它,但这次是作为管理员。

加载Visual Studio后,再次点击开始。这次,项目构建没有错误,SSMS启动。如果我们关闭连接到服务器窗口并检查工具菜单,我们可以看到我们的扩展程序就在那里,就在它应该的位置。

如果我们单击我们的菜单项,我们可以看到我们的断点在Visual Studio中被命中(这意味着调试工作),如果我们点击继续,我们可以看到我们的消息框显示在SSMS中(这意味着我们的扩展工作)。

这真的很棒。这个扩展并没有做太多,但是在尝试创建自己的扩展时它是一个很好的起点。我们最终建立了开发环境和项目,用于开发SSMS扩展。所以

然后去哪儿?

好吧,我真的不知道。你最好的办法是在GitHub上寻找扩展项目,以获得一些想法并查看一些代码示例,这些代码示例在创建自己的代码时非常有用。不幸的是,这些并不是很多,但有一些(在前面的教程中提到的一些),这些可以真的是有帮助的。除此之外,我想只是谷歌,但正如我之前提到过的几次,在网络上找不到太多关于SSMS扩展的内容。查看有关Visual Studio扩展的教程,因为它们非常相似,并且在尝试找出如何实现某些特定内容时可以提供很多有价值的东西,例如将命令按钮放在除工具菜单之外的其他位置(例如,右键单击上下文菜单)或获取当前活动的编辑器窗口。

祝好运...

注意:与前一个教程不同,本教程不包含任何可下载的代码或项目文件,因为这样的项目启动过程不需要编写任何代码,您可以通过遵循这些步骤并查看提供的图像来复制上面的结果。

 

原文地址:https://www.codeproject.com/Articles/1377559/How-to-Create-SQL-Server-Management-Studio-18-SSMS

猜你喜欢

转载自blog.csdn.net/mzl87/article/details/89490829