目录
将扩展上传到Visual Studio Gallery和Marketplace
介绍
本文是Visual Studio扩展性系列文章“创建您的第一个Visual Studio VSIX包”文章的延续。第一部分侧重于创建Visual Studio扩展以在Windows资源管理器中查找文件或文件夹。本文将说明如何使Visual Studio扩展部署准备就绪(即,如何通过GIT将扩展部署到暂存服务器,并在Visual StudioMarketplace上发布扩展以使其可供公众使用)。
在本文中,我将解释如何将Visual Studio扩展直接签入到GIT存储库,一旦扩展推送到GIT存储库,它就会通过持续集成自动部署到AppVeyor上创建的暂存服务器并在那里编译代码,然后自动更新相同的扩展到生产中,即,在我们的例子中,Visual Studio Gallery。
路线图
让我再次修改这一系列Visual Studio Extensibility的路线图。如下所述,该系列将分为三篇文章,我们将更多地关注实际实现和动手操作,而不是过多地研究理论。
- Visual Studio扩展性(第1天):创建您的第一个Visual Studio VSIX包
- Visual Studio扩展性(第2天):通过持续集成在暂存服务器和GIT上部署VSIX包
- Visual Studio扩展性(第3天):在Visual Studio隔离Shell中嵌入VSIX包
先决条件
本文的先决条件是运行在本系列的前一部分中创建的应用程序或正在运行的示例 Visual Studio 扩展应用程序。您还需要在Github上拥有一个帐户。所以请创建一个。
在我们真正开始之前,我需要本文的读者从这里下载由Mads Kristensen编写的安装扩展性工具。
本系列文章还受到Mads Kristensen在Build 2016上的演讲以及他在Visual Studio可扩展性方面的工作的启发。
在GIT上发布扩展
在Visual Studio中打开文件定位器的现有源代码。右键单击该解决方案,您将看到“扩展性工具”选项,并在其上下文菜单中显示“准备Github...”选项。选择该选项,如下图所示:
这将要求确认GIT上下文中的某些文件将添加到解决方案中。单击“是”并继续。
单击“是”时,将向解决方案中添加自述文件和更改日志文件,如下所示,并将许多其他文件添加到代码所在的文件系统上的文件夹中。
如果您看到自述文件,您将看到它足够智能,可以从清单文件中选取信息,并在其中添加了相同的说明“帮助在Windows资源管理器中查找文件和文件夹”。
ChangeLog文件也非常重要,因为它为用户提供了更新,指示项目的路线图,上一版本中的功能以及不久的将来将要推出的功能。它还跟踪版本号信息。更新日志还可以帮助您为自己创建一种文档以及项目/扩展的详细信息。
让我们更新 ChangeLog 文件,使其更具描述性,而我们的扩展。
我们称之为版本号1.0和发布日期。由于它是初始版本,请提供说明它是初始版本和功能的文本(即在Windows资源管理器中打开文件)。在路线图上,由于我们还没有计划,因此您可以指定即将推出...如上图所示。
当我们为Github准备解决方案时,还会将许可证添加到项目文件夹中,因此现在我们有了许可证,可以将许可证添加到我们的扩展中。打开source.extension.vsixmanifest,在那里我们可以看到许可证选项。
浏览位于添加其他GIT文件的位置的许可证文件,选择许可证文件并将其添加为链接,如下图所示:
现在,右键单击Visual Studio中“资源”文件夹中添加的许可证文件并打开其属性,将“生成操作”更改为Content并且“包含在VSIX选项中”为true,以便我们的许可证嵌入并随 VSIX 扩展本身一起提供。
现在,扩展用户可以在安装扩展时看到许可证。
我们现在还需要更新自述文件,因为它将在Visual Studio库中提供,用户将从这些文件获得有关它实际作用以及如何使用它的帮助。因此,我们需要使用一些说明和清晰的屏幕截图更新自述文件,以帮助用户更好地了解扩展名。
在“功能”部分添加文本以描述扩展名,例如“在Windows资源管理器中打开所选文件”。功能1为“在Windows资源管理器中查找文件”,并为其提供一些描述性文本,例如“选择文件或多个文件并右键单击”,如下图所示。
现在在功能1下方的位置添加一个图像。
这将打开要保存图像的文件夹,只需创建一个名为 images 的新文件夹,到源代码所在的位置并将图像放置在那里,它将自动添加到带有图像链接的 Readme.md 中,如上图所示自述文件。同样,添加显示打开的文件夹的第二个,并向自述文件添加一些说明。
现在,解决方案已准备好推送到GIT。右键单击解决方案,然后在上下文菜单中,选择“将解决方案添加到源代码管理”选项,如下所示:
单击此选项时,将显示一个对话框,用于选择源代码管理选项。
选择 Git,然后单击确定。在提交更改之前,系统会要求你配置用户名和电子邮件地址。
在此处提供Git帐户凭据。
如果您没有GitHub扩展,请从扩展和更新中下载它,如下所示:
安装它,现在解决方案已准备好提交。
为您的存储库命名并将其发布到Github。您的源代码将被推送到Github,并且将使用您在发布时指定的名称创建一个存储库。
现在单击您的存储库,您可以看到Git上提供的完整源代码,以及我们提供给扩展的自述文件信息。
通过Appveyor构建持续集成
现在我们想要的是,一旦源代码在Git上发布,它就应该被自动编译并发布到Visual Studio扩展库中。为此,我们将使用Appveyor。右键单击“扩展性工具”下的“上下文”菜单中的解决方案;选择“准备批准”选项。
此选项将要求你添加 Appveyor.yml,单击“确定”,它将添加到你的解决方案中,如下图所示。此 yml 文件是添加到解决方案中的生成脚本。
提交并再次推送对Git的更改。
打开审批者网站并登录。你可以在这里通过Github登录。
当您使用Github帐户登录时,您可以在Appveyor中看到所有Github项目。
现在搜索您的扩展项目。
就我而言,它是“LocateFileInWindowsExplorer”并单击ADD。它会打开一个新页面,您可以在其中单击“新建”,如下所示:
在这里开始新的构建意味着现在Appveyor将与Github通信,每当文件或代码发生更改或新代码被推送到GitHub时,它都会在发布后自动开始构建Github上可用的代码。您将看到控制台,如下所示:
它说我们的构建是成功的,所以它是一个绿色的构建。现在转到“设置”,然后单击“Badges”。Github有这些用于构建的徽章。
选择Badges中的示例降价代码选项。
转到 Visual Studio,向我自读文件,并将锁屏提醒信息替换为复制的锁屏提醒。
现在再次发布代码。这次发布代码时,我们不必在Appveyor上显式启动扩展的构建,但它会自动启动并更新版本号,如下所示:
所以现在,您可以看到版本号递增到1.0.1。
现在转到Appveyor并单击“项目”时,你将看到在生成成功后创建的扩展。
现在,这将推送到VSIX库,如下所示:
因此,这个VSIC库是我们的暂存环境,AppVeyor编译的所有扩展都会自动推送到这个暂存环境。可以下载扩展并对其进行测试。如果单击它,还可以看到自述文件也附加到此扩展,如下图所示,因此此自述文件实际上将帮助用户理解和使用您的扩展。
将扩展名下载到文件位置。
将扩展上传到Visual Studio Gallery和Marketplace
现在,我们可以将扩展上传到Visual Studio库。转到链接 visualstudiogallery.msdn.microsoft.com。在首页上,您会看到上传扩展程序的选项。选择“上传”选项。
在下一页上,您需要提供一些详细信息,例如扩展类型。在我们的例子中,这更像是一个工具,所以选择第一个选项(即工具,然后单击下一步)。
在下一个屏幕中,浏览下载的扩展并通过“选择文件”选项上传,然后单击“下一步”。
在下一个屏幕中,提供扩展的一些基本信息,如类别、标签和成本类别。我使此扩展程序免费,但您可以选择您的选项w.r.t.费用。提供源代码管理URL,即Git存储库URL,如下图所示。在描述文本区域中,您不必编写描述。只需转到您的Github存储库,复制自述文件内容并将其粘贴到此描述文本区域中。单击底部的协议复选框,然后按“贡献”按钮。
你的扩展将上传到Visual Studio库,说明它将很快在Marketplace上可用。
现在,复制Git存储库的链接地址。
转到Visual Studio中的清单文件,并将Git存储库地址粘贴到“更多信息URL”,如下所示:
将链接地址复制到 Changelog,如Git存储库的自述文件所示,并将其粘贴到Visual Studio中清单文件中的发行说明选项。
现在,从VSIX库中复制扩展的链接地址,并将其粘贴到自述文件中,其中提到了从中下载扩展,如下图所示。
优化项目结构
现在,我们的解决方案中还剩下一些小东西需要优化。运行实验实例以测试扩展并从帮助菜单中打开“关于Visual Studio”选项时,如下图所示。你看到它被写成LocateFolderCommandExtension,有一些我们没有提供的随机描述。那么它从何而来?
在解决方案资源管理器中,您可以找到包含上述扩展标题、说明的 VSPackage.resx 文件,图标来自资源文件夹的 LocateFolderCommandPackage.ico,但现在由于我们不需要这些文件,我们可以删除它们,因为我们在清单文件中已经有一个扩展名、标题和说明的图标。
删除这些文件后,右键单击 source.extension.vsixmanifest,然后单击上下文菜单中的自动同步Resx和图标文件。
这样做会将一个图标和一个新的resx文件添加到 source.extension.manifet 文件,并在清单上提供所需的图标、标题和描述详细信息。
你会发现一个名为source.extension.cs的新生成的类也在清单文件下。
在 LocateFolderCommandPackage.cs 文件中,删除所有不相关的信息,如构造函数。现在我们看到这个类文件中提到了一个PackageGuidstring。
这在vsct文件中也存在PackageGuidString,因此再次避免重复,请右键单击 vsct 文件并为自动同步VSCT命令选择一个选项,如下图所示。
同步后,你现在可以从LocateFolderCommandPackage.cs中删除PackageGuidString和顶部的GUID属性信息,并从PackageGuids类中添加GUID,如下图所示:
现在我们需要使我们的扩展代码更具可读性和可理解性(例如,文件名)。因此,在名为“命令”的项目下创建一个新文件夹,并将命令LocateFolderCommand移动到此文件夹。
将LocateFolderCommandPackage.cs重命名为 VSPackage,将 LocateFolderCommandPackage.vsct 重命名为 VSCommandTable,这些名称听起来更有意义。
同样,构建、提交并将所有更改推送到Git
推送代码后,Appveyor会自动启动构建。
生成为绿色后,可以在VSIX库中找到具有更新版本的扩展,这次是1.0.2,如下图所示:
再次下载更新的扩展,并在Visual Studio Marketplace上传的扩展中,通过编辑已上传的扩展再次上传此扩展。
结论
本文介绍了如何按照某些标准和自动过程将扩展发布到Visual Studio Marketplace。在本系列的下一篇文章中,我们将尝试将此扩展嵌入到Visual Studio隔离shell应用程序中。
引用
- https://channel9.msdn.com/events/Build/2016/B886
- What is a VSIX? | Microsoft Learn
- Anatomy of a VSIX Package - Visual Studio 2015 | Microsoft Learn
完整的源代码
Marketplace扩展
https://www.codeproject.com/Articles/1170705/Visual-Studio-Extensibility-Day-2-Deploying-Visual