想象一下,创建的扩展比以往任何时候都运行得更快、更流畅!如果您最近还没有跟上,我们一直在努力改进 VisualStudio. Extensibility SDK。VisualStudio. Extensibility 帮助您构建在主 IDE 进程之外运行的扩展,以提高性能和可靠性。它还提供了一个时尚而直观的基于 .NET 8 的 API 和全面且维护良好的文档,可以帮助您开发出色的扩展。

  这个17.10版本建立在我们以前的版本之上,它带来了全新的调试体验,使您更容易让您的扩展以您期望的方式运行。我们还增强了远程UI特性,添加了提示用户的新方法,并继续向项目查询 API 添加功能。

  请访问 https://aka.ms/VisualStudio.Extensibility 获取最新的文档和安装说明。我们鼓励您通过 GitHub 仓库的问题跟踪报告错误并建议功能,在那里您还可以找到扩展示例来帮助您开始。

VisualStudio.Extensibility 有什么新功能?

  您想要比以前更快速、更容易地开发和调试扩展吗?我们的17.10版本增加了以下功能来帮助您做到这一点:

  - 调试您的扩展使用我们新的 Diagnostics Explorer

  - 在 UI 中利用 XAML 资源

  - 让您的扩展用户选择文件或目录

  - 使用改进的查询 API 跟踪项目更改

调试您的扩展使用我们新的 Diagnostics Explorer

  我们已经创建了一个强大的新工具来调试您的扩展,叫做 VisualStudio.Extensibility Diagnostics Explorer,可以在 Visual Studio Marketplace 中找到它。有了它,您就能像 Visual Studio 那样看到扩展,从而确保您正确地配置了您的扩展。

  这个工具本身是作为进程内的 VisualStudio. Extensibility 扩展编写的。可以帮助您回答诸如“为什么我的命令没有显示在我期望它在 IDE 中的位置?”或“为什么我的扩展没有在我期望的时候被激活?”

检查配置

  VisualStudio.Extensibility 通过消除手动维护单独的元数据文件的需要,已经使您更容易配置扩展。现在,我们在此基础上构建了 Diagnostics Explorer,它可以让您准确地看到 Visual Studio 发现了哪些扩展和组件,以及每个发现项的配置。

  例如,如果您没有在 IDE 中看到命令,您可以使用命令选项卡 Diagnostics Explorer 查看已贡献给 Visual Studio 的任何命令。如果它没有出现在列表中,这是一个提示,需要再次检查您的配置以确保它被发现。如果它存在,但未启用或不可见,则可能需要检查激活约束。如果它被标记为启用和可见,您可以使用下拉菜单来查看命令放置,以确保您已经正确地放置了它。

  使用 Commands 选项卡,您可以检查命令、命令集、组、菜单和工具栏、命令位置和动态命令锚点。其他选项卡允许您检查组件的其他功能区域,包括工具窗口、文档类型、文本视图等。当我们在未来的版本中添加功能时,您将能够在 Diagnostics Explorer 中检查任何新组件。

查看实时事件日志

  我们知道,像您这样的扩展开发人员有时开发的扩展可能需要处理整个 IDE 中的事件,例如正在执行的命令,正在打开的工具窗口或正在创建的 TextView,所以我们添加了一个实时事件查看器,使您能够实时观察这些事件及其属性:

创建更好的激活约束

  Diagnostics Explorer 中的 Activation Constraints 选项卡为您提供了创建激活约束时每个可用值的当前状态。使用此选项卡,您可以使 IDE 进入您想要用于激活的状态(例如构建项目或打开 markdown 文件),然后您可以检查每个可用表达式的值,以帮助您创建约束。

  例如,假设您希望一个命令仅在编辑器中打开 C# 文件时才可见。使用 Diagnostics Explorer,您可以打开一个 C# 文件,使用 Activation Constraints 选项卡来帮助您确定需要哪些表达式来创建约束:

EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorContentType, "CSharp").

在 UI 中利用 XAML 资源

  XAML 资源允许您定义可以在整个项目中使用的对象,如颜色、笔刷或样式,从而加速UI开发。通过这个版本的 VisualStudio. Extensibility:我们正在添加对 XAML 资源的支持,以帮助您为扩展开发出色的UI!

  与我们的其他远程UI功能(如UI控件)一致,您可以将任何带有 ResourceDictionaries 的XAML文件定义为嵌入在 .csproj 文件中的资源:

<ItemGroup>
<EmbeddedResource Include="\XamlResources.*xaml" />
<Page Remove="XamlResources.*xaml" />
</ItemGroup>

  一旦定义,很容易将您的资源包含在其他组件中,以便它们可以在整个项目的 XAML 中被引用:

ResourceDictionaries.AddEmbeddedResource("XamlResources.xaml")

  您甚至可以本地化您的资源:查看 Modal Dialog 示例获取更多信息,并让我们知道您的想法!

让您的扩展用户选择文件或目录

  在我们之前对用户提示和自定义对话框的支持的基础上,我们增加了从扩展中显示文件和目录选择器提示的能力。例如,您可以使用 ShowOpenFileDialogAsync() 方法来提示用户选择一个文件来打开:

VisualStudioExtensibility.Shell().ShowOpenFileDialogAsync(options, cancellationToken);

  使用新的 API,您可以提示用户:

  - 选择一个文件打开

  - 选择要打开一个或多个文件

  - 选择单个文件来另存为

  - 选择要打开的目录

  与往常一样,如果有其他类型的用户提示对您的扩展很重要,请通过我们的问题跟踪告诉我们。

使用改进的查询 API 跟踪项目更改

  我们的 17.10 版本为项目查询 API 添加了三个新特性。

跟踪查询结果的更改

  TrackUpdatesAsync() 方法可以在项目系统查询中使用,以创建一个 IObserver 对象来跟踪您的查询中项目或解决方案状态的变化。例如,如果您想跟踪项目中文件的更新时间,您可以使用:

var query = await myProject
.Files
.With(f => f.FileName)
.TrackUpdatesAsync(new TrackerObserver(), CancellationToken.None);

  在这个例子中,TrackerObserver 实现了 IObserver<IQueryTrackUpdates<IFileSnapshot>>,所以您可以使用您自己的自定义逻辑来处理更新事件。

查询项目规则

  项目查询 API 中的每个项目现在都包含一个 RulesResults 特性,其中包括规则名称和一个项列表。您可以通过调用指定配置的 RuleResultsByName() 来访问这些规则。

var results = await querySpace
.Projects
.With(p => p.Path)
.With(p => p.ActiveConfigurations
.With(c => c.RuleResultsByRuleName("CompilerCommandLineArgs")
.With(r => r.RuleName)
.With(r => r.Items
.With(i => i.Name))))
.ExecuteQueryAsync();

跳过查询结果

  我们添加了 Skip() 方法,使您能够跳过查询中的结果。

var projects = await queryableSpace.Projects
.With(proj => proj.Name)
.Skip(1)
.ExecuteQueryAsync();

  这里,跳过第一个项目,返回其余的项目。

如果没有您的参与我们做不到这些!

  我们需要您的帮助,因为我们将继续开发 VisualStudio.Extensibility!请尝试这个预览版,让我们知道您的想法。查看文档,浏览代码示例,并构建您的第一个扩展。您可以通过我们的问题跟踪发送反馈、报告问题或功能需求。

  您还可以在我们的 VisualStudio. Extensibility GitHub repo 中找到有关突破性更改和已知问题的信息。

  我们正在优先考虑扩展程序要求的功能,所以请尝试一下 VisualStudio. Extensibility,并与我们分享您的想法!

原文链接:https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-17-10/

【译】VisualStudio.Extensibility 17.10:用 Diagnostics Explorer 调试您的扩展的更多相关文章

  1. [CareerCup] 17.10 Encode XML 编码XML

    17.10 Since XML is very verbose, you are given a way of encoding it where each tag gets mapped to a ...

  2. Ubuntu 17.10.1安装, 定制

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 2018.4.7 Ubuntu 17.10.1安装, 定制, 后续搭建LAMP环境 ...

  3. 20145236《网络对抗》进阶实验——64位Ubuntu 17.10.1 ROP攻击

    20145236<网络对抗>进阶实验--64位Ubuntu 17.10.1 ROP攻击 基础知识 ROP攻击 ROP全称为Retrun-oriented Programmming(面向返回 ...

  4. ubuntu 17.10.1 安装 virtual box 增强工具

    ubuntu 17.10.1 安装 virtual box 增强工具遇到 “  Please install the gcc make perl packages from your distribu ...

  5. 在 vmware player中安装 ubuntu 17.10

    目录 在 vmware 中安装 ubuntu 17.10 分区参考 vmware安装助手 第一步:更新 安装vmware tools 调整显示 第二步.输入法 五笔输入法 搜狗拼音输入法 ibus不能 ...

  6. Ubuntu 17.10开启 root 登陆

    使用过 Ubuntu 的人都知道,Ubuntu 默认是不能以 root 登陆的,但是我们是不是就完全不能使用 root 进行登陆了呢?当然不是,只是我们需要做一些设置.而 Ubuntu 17.10 和 ...

  7. Ubuntu网络配置IP和DNS等,适用于14.04,16.04和17.10

    本文主要介绍Ubuntu系统的网络设置,包括IP,DNS和主机名等,适用于14.04,16.04和17.10等版本 ===============  完美的分割线 ================ = ...

  8. Ubuntu系统安装,适用于14.04,16.04和17.10

    本文以14.04为案例进行安装,其他版本相关问题会做注解 1.选择要安装的系统语言 本界面建议选择English,之后再选择中文安装 注意: 安装服务器版时,对于14.x版本第一步选择中文没有问题,但 ...

  9. Ubuntu 17.04 upgrade to 17.10

    Just try  sudo do-release-upgrade if you get this An upgrade from 'zesty' to 'bionic' is not support ...

  10. Ubuntu 17.10 用 apt 搭建 lamp 环境、安装 phpmyadmin、redis 服务+扩展、mysql 扩展、开启错误提示、配置虚拟主机

    2018-02-24 13:50:30 更新: 个人喜欢相对原生又不太麻烦,所以用 apt 构建环境.不过,最近使用到现在记得出现过了 3 次 apache 或 mysql 服务器无法启动或无法连接的 ...

随机推荐

  1. dotnet 部署 github 的 Action 进行持续集成

    被微软收购的 GitHub 现在十分土豪,提供了免费的服务器给咱构建.刚好微软对 dotnet 的支持是特别好的,毕竟还算半个自家的东西,大概只需要 3 分钟就可以在 github 上通过 Actio ...

  2. 万字长文总结与剖析C语言关键字 -- <<C语言深度解剖>>

    C总结与剖析:关键字篇 -- <<C语言深度解剖>> 目录 C总结与剖析:关键字篇 -- <<C语言深度解剖>> 程序的本质:二进制文件 变量 1.变量 ...

  3. CF916E 换根树上问题

    Link 题意:对一棵树进行三种操作. 把根设为 \(x\). 将以 \(lca(y, z)\) 为根的子树中所有点的权值加 \(v\). 查询以 \(x\) 为根的子树点权之和. 初始根为 \(1\ ...

  4. 《最新出炉》系列入门篇-Python+Playwright自动化测试-41-录制视频

    1.简介 上一篇讲解和分享了录制自动生成脚本,索性连带录制视频也一股脑的在这里就讲解和分享了.今天我们将学习如何使用Playwright和Python来录制浏览器操作的视频,以便在需要时进行回放和分析 ...

  5. 小程序中使用 lottie 动画 | 踩坑经验分享

    最近被拉去支援紧急需求(赶在五一节假日前上线的,双休需要加班),参与到项目中才知道,开发的项目是微信小程序技术栈的.由于是临时支援,笔者也很久没开发过微信小程序了,所以挑选了相对独立,业务属性相对轻薄 ...

  6. Plumed分子模拟后分析

    技术背景 在前面的几篇博客中,我们分别介绍过Histogram算法的使用.Plumed安装与简单使用.Plumed一般就是两种用法:要么在运行分子动力学模拟的过程中实时的对接,要么就是把分子模拟的相关 ...

  7. ansible(17)--ansible的archive和unarchive模块

    1. archive模块 功能:在远端主机打包与压缩: 主要参数如下: 参数 说明 path 要压缩的文件或目录 dest 压缩后的文件 format 指定打包压缩的类型:bz2.gz.tar.xz. ...

  8. 简易版跳板机-teleport使用

    目录 1 环境搭建 2 teleport工具搭建 3 teleport使用示例 3.1 资产管理-添加主机 3.2 资产管理-添加账号 3.3 创建用户 3.4 运维授权 3.5 安装客户端助手 3. ...

  9. iframe 高度设置为0时还有占位_iframe占位

    iframe是一个内联元素,默认是跟baseline对齐的,iframe后边有个看不见.摸不着的行内空白节点,空白节点占据着高度,iframe与空白节点的基线对齐,导致了div被撑开,从而出现滚动条, ...

  10. 在 JS 中使用 canvas 给图片添加文字水印

    实现说明: 1.先通过 new Image() 载入图片: 2.图片加载成功后使用 drawImage() 将图片绘制到画布上: 3.最后使用 fillText() 函数绘制水印. 下面展示了详细用法 ...