Visual Studio 可扩展性(第 3 天):Visual Studio 隔离 Shell 中的 Visual Studio 扩展





5.00/5 (17投票s)
自定义基本的 Visual Studio 隔离 Shell 应用程序,并将自定义扩展添加到 Shell 应用程序。
目录
- 引言
- 路线图
- 必备组件
- Visual Studio Shell
- Visual Studio 隔离 Shell
- 基本隔离 Shell 解决方案结构
- 自定义 Visual Studio 隔离 Shell 应用程序
- 启动 Visual Studio 隔离 Shell 应用程序
- 因此,我们得到了一个与 Visual Studio 类似的自定义应用程序
- 将 VSIX 扩展添加到隔离 Shell 应用程序
- 测试应用程序
- 结论
- 精读
- 参考文献
- 完整源代码
- Marketplace 中的扩展
- 历史
简介
本文是关于 Visual Studio 可扩展性系列文章“创建你的第一个 Visual Studio VSIX 包”的延续。第一部分重点介绍了如何创建 Visual Studio 扩展来在 Windows 资源管理器中定位文件或文件夹。第二部分更多地是关于通过持续集成将 Visual Studio 扩展部署到暂存服务器。本文将说明如何将 Visual Studio 扩展或 Visual Studio 包添加或嵌入到 Visual Studio 隔离 Shell 应用程序中。Visual Studio 提供了灵活性,可以创建我们自己的 IDE 或完全是 Visual Studio 类别的产品,并包含自定义扩展或一些预定义的 Visual Studio 功能。因此,可以获得作为产品的自定义 Visual Studio,并在市场上销售。
在本文中,我将解释如何自定义基本的 Visual Studio 隔离 Shell 应用程序,并将自定义扩展添加到 Shell 应用程序。Visual Studio 可以从其启动屏幕到其提供的的高级功能进行完全自定义。
路线图
让我再次回顾一下这个 Visual Studio 可扩展性系列的路线图。该系列将分为三篇文章,如上所述,我们将更多地关注实际实现和动手操作,而不是深入研究理论。
- Visual Studio 可扩展性(第 1 天):创建你的第一个 Visual Studio VSIX 包
- Visual Studio 可扩展性(第 2 天):通过持续集成将 VSIX 包部署到暂存服务器和 GIT
- Visual Studio 可扩展性(第 3 天):将 VSIX 包嵌入 Visual Studio 隔离 Shell
先决条件
本文的先决条件是来自本系列第一部分中创建的运行应用程序。带有 VSIX 扩展的先前应用程序的源代码可以与本文一起下载,也可以从Github 下载。
Visual Studio Shell
Visual Studio Shell 有两种模式:集成模式和隔离模式。以下是两种模式的定义。可以在MSDN 上阅读更多内容。
集成模式
“集成模式使用户能够使用标准的 Visual Studio 功能以及你的自定义工具。集成 Shell 主要用于托管编程语言和软件开发工具。
基于集成 Shell 构建的自定义工具会自动合并到同一台计算机上安装的任何其他 Visual Studio 版本中。如果尚未安装 Visual Studio,则可以提供 Visual Studio 集成 Shell 的可分发版本。
Visual Studio 集成 Shell 的可分发版本不包含编程语言以及支持其各自项目系统的功能。”
隔离模式
“隔离模式允许你创建与 Visual Studio 其他版本并排运行的自定义工具。它主要用于可以访问 Visual Studio 服务但又不依赖所有标准 Visual Studio 功能的工具。你可以自定义基于 Visual Studio 隔离 Shell 构建的应用程序的外观。你可以轻松关闭不希望与你的应用程序一起出现的那些功能和菜单命令组。”
Visual Studio 隔离 Shell
MSDN 的定义是:
“Visual Studio 隔离 Shell 允许你创建可以与其他 Visual Studio 版本并排运行的独立应用程序。它主要用于托管可以利用 Visual Studio 服务但同时具有自定义外观和品牌推广的专用工具。Visual Studio 的功能和菜单命令组可以轻松启用或禁用。应用程序标题、应用程序图标和启动屏幕完全可自定义。”阅读更多…
正如我在文章开头所描述的,你可以使用 Visual Studio 隔离 Shell 来创建/自定义像产品一样的 Visual Studio。有很多关于这方面的理论知识,可以在 MSDN 等各种在线场所找到。本文将侧重于创建一个简单的 Visual Studio 隔离 Shell 应用程序,并将其集成预先开发的扩展。由于完整的理论部分超出了本文的范围。
创建隔离 Shell 应用程序
步骤 1(创建新项目)
打开 Visual Studio 2015,转到 **文件** -> **新建** -> **项目**。
**步骤 2(选择隔离 Shell)**
在已安装的项目模板中,展开“其他项目类型”节点,然后选择 `Extensibility` 作为项目类型。在“可扩展性”下的可用模板中选择 Visual Studio 隔离 Shell,并为应用程序命名。例如,`ShellApplication`,如下图所示。仅当你在安装 Visual Studio 2015 时启用了可扩展性功能,才会显示可扩展性项目类型。你也可以修改 Visual Studio 安装来启用这些功能。这在系列的第一部分中已经解释过了。
步骤 3(获取解决方案)
点击“**确定**”按钮后,Visual Studio 会安装必要的 NuGet 包,并创建一个与之前输入的名称相同的解决方案,该解决方案包含四个项目。这是隔离 Shell 应用程序的基本结构,可以根据需要进行扩展。在主编辑器屏幕中,你可以看到包含所有信息和 MSDN 上关于 Visual Studio 隔离 Shell 的精彩文章链接的页面。
基本隔离 Shell 解决方案结构
ShellApplication 项目
这是负责隔离 Shell 应用程序自定义外观的主要项目。所有自定义和操作都可以从该项目控制。该项目包含一个名为 _ShellCustomization_ 的文件夹,该文件夹允许你控制应用程序的外观、启动/加载屏幕以及我们可以启用或禁用哪些现有 Visual Studio 功能。你可以通过自定义 _pkgdef_ 或 _pkgundef_ 文件来实现这一点。了解更多关于自定义的内容。
ShellApplication.AboutBoxPackage 项目
这是一个 VSIX 包项目,帮助我们自定义 **帮助\关于框** 部分。你可以在这里提供产品的描述和版权信息。
基本上,根据你的需求和愿望修改“**关于**”部分。
ShellExtensionsVSIX 项目
这是一个小的简单项目,包含一个名为“source.extension.vsixmanifest”的文件。该文件保存了将在隔离 Shell 应用程序中使用的各种组件和模块的引用。因此,无论添加到隔离 Shell 应用程序中的 Visual Studio 扩展或 VSIX 项目是什么,其引用都将添加到 `shellextensionvsix` 项目中,并在文件的 `Assets` 部分指定,例如,如下面的图片所示,**Aboutbox** 包被指定了。
ShellApplicationUI 项目
这是一个 C++ 项目,用于创建一个包含本地化字符串的命令和资源字符串的卫星程序集。
自定义 Visual Studio 隔离 Shell 应用程序
现在我们已经创建了解决方案结构,可以根据需要自定义应用程序了。
ShellApplication
在 `ShellApplication` 项目的 _ShellCustomization_ 文件夹中,打开 _ShellApplication.Application.pkgdef_ 文件。我们可以看到文件中的可用设置是以键值对的形式存在的。`SplashScreenBitmap` 设置(如下图所示)用于定义应用程序启动时显示的默认图像文件。默认的是一个白色图像,底部带有“**Powered by Visual Studio**”字样。你可以根据产品的启动主图像更改此图像。它需要根文件夹中的 _Splash.bmp_ 文件的路径。用自定义图像文件替换 _Splash.bmp_ 文件。由于我将演示如何集成搜索文件扩展,因此我创建了一个带有搜索图像的自定义启动屏幕文件。同样,替换“资源文件”文件夹中的 `ApplicationIcon` 和应用程序小图标,这些设置在 _pkgdef_ 文件中以 `AppIcon` 的名称提及。更改 _pkgdef_ 文件中的 `AppName`(例如,你的应用程序/产品的名称)。你可以通过根据需要更改 _pkgdef_ 文件中存在的键的值来实现更多自定义,例如 `DefaultHomePage`、`DefaultSearchPage` 等。
关于框包
如前所述,你还可以自定义 `AboutBox` 包,该包负责在应用程序启动时显示 **帮助\关于** 中的信息。在 `ShellApplication.AboutBoxPackage` 中,打开 _source.extension.vsixmanifest_ 文件。由于此项目是 VSIX 项目类型,因此你可以在项目中看到 vsct、extension 和 command 文件,就像在本系列第一部分创建的“在资源管理器中查找”项目中所使用的那样。在 _vsixmanifest_ 文件中,在 Metadata 部分指定作者、产品版本、产品名称、描述和产品语言。所有这些信息都将在用户单击隔离 Shell 应用程序中的 **帮助\关于** 按钮时显示。
右键单击 _vsixmanifest_ 文件,然后在上下文菜单中,单击“自动同步 Resx”,y=图标文件以同步 resx 文件和清单文件,如下图所示。这一步在系列的第一部分中也有详细描述。
现在我们已经同步了 _resx_ 和图标文件,多余的 _VSPackage.resx_ 文件就没有意义了,可以从应用程序中删除,如下图所示。我们可以看到清单文件现在在 _source.extension.vsixmanifest_ 文件下方有自己的 _resx_ 文件和 _cs_ 文件。
根据你的需要修改 `AboutBoxPackage` 的程序集信息。_AssemblyInfo.cs_ 文件位于 `ShellApplication.AboutBoxPackage` 项目下的 **Properties** 中。
启动 Visual Studio 隔离 Shell 应用程序
我们可以启动基本的隔离 Shell 应用程序,看看结果如何。编译解决方案,然后按 **F5** 运行应用程序。当应用程序启动时,我们将看到我们用作启动屏幕的自定义图像,如下所示。
之后,应用程序启动。我们看到了另一个类似 Visual Studio 的应用程序,顶部有一个自定义的小图标,以及在 `ShellApplication` _pkgdef_ 文件中清单文件指定的 `AppName`。
因此,我们得到了一个与 Visual Studio 类似的自定义应用程序。
将 VSIX 扩展添加到隔离 Shell 应用程序
可以将新的 VSIX 包作为扩展添加,或者将已开发的扩展添加到隔离 Shell 应用程序中,以便扩展成为产品的一部分。我们将把一个已创建的 `LocateFolder` 扩展添加到此隔离 Shell 应用程序中。这需要几个简单的步骤。
右键单击隔离 Shell 应用程序的解决方案资源管理器,然后选择添加现有项目的选项。我们需要将现有的“查找文件夹”项目添加到此解决方案。
添加项目后,解决方案资源管理器将显示如下面的图片。
现在我们需要编译此项目,并将引用添加到 `ShellExtensionsVSIX` 项目。还记得吗?该项目包含一个清单文件,其中列出了所有扩展。
右键单击 **References**,然后添加对 `LocateFolder` 项目的引用。
现在打开 _source.extension.vsixmanifest_ 文件。在 **Assets** 部分,我们可以看到一个已指定的 `AboutBox` 包。
同样,我们也需要添加 `LocateFolder` 项目。因此,单击 **New** 按钮。将打开一个新窗口来添加新资产,如下图所示。将 **Type** 选择为 `Microsoft.VisualStudio.VsPackage`,将 **Source** 选择为“A project in current solution
”(因为我们将 `LocateFolder` 项目作为现有项目添加到了我们的解决方案中)。
接下来,选择项目;在这种情况下,如下图所示,是 `LocateFolder`,然后单击 **OK**。
完成后,项目将被添加到资产列表中,并且所有必需的相关 NuGet 包都将被还原。
现在编译应用程序。
测试应用程序
剩下的唯一部分就是检查“查找文件夹”扩展是否真的嵌入到了隔离 Shell 应用程序中。所以,只需运行应用程序。启动屏幕将显示。
当隔离 Shell 应用程序打开时,通过 **文件** -> **新建** -> **项目** 创建一个新项目。
选择一个空白解决方案,并为其命名。
在该解决方案中添加新文件或现有文件。
现在右键单击该文件,检查“在资源管理器中打开”扩展是否存在。
将在文件的上下文菜单中看到“在资源管理器中打开”扩展,就像在第一部分中的实验实例中显示的那样。这证明该扩展已成功嵌入到 Visual Studio 隔离 Shell 应用程序中。现在可以实际单击命令来测试该扩展,它将打开文件位置并选择该文件。
结论
本文解释了如何创建一个简单的 Visual Studio 隔离 Shell 应用程序。利用 Visual Studio 的强大功能,可以创建一个全新的产品或新的 IDE,并利用 Visual Studio 的内置功能。本文的“**精读**”和“**参考**”部分对于想要更详细地探索隔离 Shell 应用程序的人来说很重要。
精读
- http://www.visualstudioextensibility.com/articles/packages/
- https://github.com/Microsoft/VSSDK-Extensibility-Samples
参考
- https://msdn.microsoft.com/en-us/library/bb685514.aspx
- https://msdn.microsoft.com/en-us/library/ee390883.aspx
- https://msdn.microsoft.com/en-us/library/bb685612.aspx
完整源代码
Marketplace 中的扩展
历史
- 2017 年 3 月 8 日:初稿