【译】新的 MSBuild 编辑体验
MSBuild 是 .NET 开发体验的基本组成部分,但它对新手和有经验的开发人员都具有挑战性。为了帮助开发人员更好地理解他们的项目文件,并访问需要直接编辑项目文件的高级功能,我们发布了一个实验性的 MSBuild 编辑器,它对 MSBuild 文件的理解比当前 XML schema 所允许的要丰富得多。根据反馈,我们希望所有 .NET 开发人员都可以默认使用它。如果您使用 MSBuild 文件工作,请尝试一下,让我们知道它是如何工作的。
适合哪些用户使用?
尽管 Visual Studio 为管理项目及其设置提供了丰富的 UI,但您可能需要直接编辑 csproj 文件以访问 UI 中未公开的某些高级特性。在从源代码控制合并更改时,您可能还需要直接编辑 csproj 文件,或者您可能正在编写 targets 和 props 文件以供本地使用或在 NuGet 包中发布。如果这些场景中的任何一个适用于您,那么我们希望您体验下新功能。
了解您的项目文件
新的 MSBuild 编辑器不仅为 MSBuild 文件中的 XML 元素提供了快速信息,还为 MSBuild 表达式中的属性、项和元数据提供了快速信息。快速信息弹出窗口更丰富,有指向相关文档的深层链接,以及指向其他文件引用的超链接,这些超链接可以帮助您了解底层如何使用该属性或项。

如果您想了解如何使用属性或项,可以使用 Ctrl-Click 或 Go to Definition 命令转到定义它的位置。你也可以使用 Find References 命令在所有导入的文件中执行精确的搜索:

不离开编辑器编写代码
即使作为一名经验丰富的 MSBuild 作者,我也经常打开文档来查找 MSBuild 属性、项和元数据的确切名称和允许值。当我使用 MSBuild 编辑器时,我很少这样做,因为它几乎在文件的任何地方都提供智能感知,并根据它的 schema 提供文档:

它对 NuGet 包有特殊的支持,允许你搜索包的 ID,并查看包的描述和链接到它的 NuGet.org 页面:

其他类型也有特殊处理,例如语言文化:

在 MSBuild 表达式中也支持智能感知,包括属性函数和项函数:

编辑器并不局限于在其 schema 中定义的那些属性和项。它扫描所有导入的 MSBuild 文件,并为在这些文件中找到的任何属性、项、元数据和目标提供“推断完成”。更棒的是,工具提示有一个超链接,指向属性或项的应用场景:

及早发现问题
MSBuild 编辑器的验证不仅仅是 XML 验证。它将类型系统覆盖到 MSBuild 上,因此您将获得关于 URL 或版本字符串等的格式错误。它对 MSBuild 表达式格式的理解意味着您无需运行构建就可以捕获格式不正确的条件和表达式。

甚至还有一些 Roslyn 风格的分析器和代码修复。

增强 MSBuild 编辑体验
MSBuild 编辑器由一种新的 MSBuild 特定的基于 json 的 schema 格式提供支持,该格式允许为 MSBuild 属性、项、项元数据和 targets 定义文档和类型注释。它包括 .NET SDK 和其他常用 targets 和 SDK 的内置schema。
但是,您也可以为自己的 MSBuild targets 编写 schema,以允许 MSBuild 编辑器在编辑或使用它们时提供更丰富的体验。如果您是包含 build targets 的 NuGet 包的作者,那么您可以在 NuGet 包中发布该 sidecar schema,以便为包的使用者提供更好的 MSBuild 编辑体验。
Q&A
Q:扩展有一个 GitHub 仓库-我可以从源代码构建和贡献吗?
A:绝对!只需克隆仓库及其子模块,在 Visual Studio 中打开,然后按 F5。
Q:为什么扩展仓库、命名空间和程序集的名字中有“MonoDevelop”?
A:MSBuild 编辑器是我最初在2015年3月为 MonoDevelop IDE 创建的扩展的后代。尽管它在过去几年里发展了很多,包括移植到 Visual Studio,但出于怀旧的考虑,我保留了内部名称。
Q:我可以在 Visual Studio Code 中使用扩展吗?
A:还不行!我目前正在移植扩展到 LSP(语言服务器协议,Language Server Protocol),所以它可以在 Visual Studio Code 扩展中使用。虽然 LSP 是新扩展的明显选择,但这个代码库可以追溯到 Visual Studio Code 发布之前。
我们渴望您的反馈!
如果您想尝试下,你可以通过在 Visual Studio 扩展管理中搜索“MSBuild Editor”找到它,或者从 Visual Studio Marketplace 下载它。该扩展目前仅适用于 Visual Studio,但将其移植到 Visual Studio Code 的工作正在进行中。
如果您遇到任何此扩展的任何问题,请发布其到 GitHub 问题页面。扩展是开源的,欢迎贡献。请填写这份调查问卷,让我们了解您的经历。我们感谢您的反馈,它将有助于指导实验如何发展,以及 MSBuild 编辑器是否会成为 .NET 开发体验的官方支持部分。
原文链接:https://devblogs.microsoft.com/visualstudio/experimental-msbuild-editor/

【译】新的 MSBuild 编辑体验的更多相关文章
- 一款免费的在线 Markdown 笔记,类似 typora 编辑体验
为什么要开发一款新的编辑器 自从我开始使用 Markdown,就爱上了这种标记语法,轻量.纯文本兼容是最大的优点,哪里都可以编辑,一开始是在 IDE 上直接编辑,后来笔记越来越多,需要上传图片,有云同 ...
- 加链接太麻烦?使用 linkit 模块提升用户编辑体验
在制作网站内容时,适当地添加链接会非常用利于网站内容的SEO.加入链接的文章可以让访客了解到更多相关内容,从而提升文章的质量.被链接到的内容也能因此获得更多的访问和关注.只不过,在内容编辑时添加链接却 ...
- Evermoney -- 重新定义印象笔记编辑体验
关于印象笔记 知识管理工具自己也算用过很多了,国内的有道,为知:国外的onenote.因为印象笔记的裁剪以及搜索功能太强大了,所以最后还是选择用印象笔记了.不过印象笔记这个公司确实态度有点不敢恭维,关 ...
- 做一个新产品需求,体验的分析文档?(例:喜马拉雅FM)
2.1 战略层 2.11 产品定位: 一款产品覆盖面广,收听节目种类齐全,资源丰富的电台APP. 以PGC为主流,通过合作方式吸纳专业的电台人,节目人,行业名人分享内容. 融合UGC,满足人们在空闲时 ...
- (译)开发优秀的虚拟现实体验:从开发I Expect You to Die中总结的六个要点
这篇文章是我从网上找来的,我觉得他非常详细的解释了VR发展的需求和必要.我认为通过这篇文章可以让大家了解VR. 译者写在最前: 来到追光动画有好几个月了,抱歉这段时间也没有什么文章与大家分享,我现在在 ...
- [译]Walkthrough: Using MSBuild
原文 MSBuild是微软VS的Build平台. 你可以在Visual Studio或Windows命令行中运行MSBuild.在这我们使用VS创建一个MSBuild项目.你可以在VS中编辑项目文件, ...
- sitecore系列教程之改进Sitecore编辑体验的5个步骤
Sitecore完全关注客户体验,在适当的时间为合适的人提供合适的体验.虽然没有人会不同意客户体验是王道,但我们仍然需要记住每天使用Sitecore的人们为客户带来惊人体验的体验. 我看到无数客户通过 ...
- 个人官网第8次升级(新功能、用户体验、修复bug、系统优化)
1.新功能. 操作日志和搜索日志的Excel报表下载. 2.用户体验. 如果是通过搜索,进入到一篇内容, 搜索关键词需要高亮. 比如,搜索"程序员"出现若干内容链接,打开链接的页面 ...
- [译]新的CCSDS图像压缩推荐标准
摘要——空间数据系统咨询委员会(CCSDS)的数据压缩工作组最近通过了图像数据压缩议案,最终版本预计在2005年发布.议案中采用的算法由两部分组成,先是一个对图像的二维离散小波变换,然后是对变换后的数 ...
- JAVA 8 新特性Stream初体验
什么是 Stream? Stream(流)是一个来自数据源的元素队列并支持聚合操作 <strong元素队列< strong="">元素是特定类型的对象,形成一个队 ...
随机推荐
- Java 常见的两个错误 -------1.栈溢出 java.lang.StackOverflowError 2.堆溢出 java.lang.OutOfMemoryError /OOM
1 package com.bytezero.exception; 2 3 /** 4 * 5 * @Description Error 6 * @author Bytezero·zhenglei! ...
- Java 继承成员变量和继承方法的区别
1 package com.bytezreo.duotai3; 2 3 /** 4 * 5 * @Description 继承成员变量和继承方法的区别 6 * @author Bytezero·zhe ...
- 2.String类能被继承吗
2.String类能被继承吗 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的. 拓展 String的底层是一个用private和final修饰的char数组.fina ...
- C语言中的rand()函数实例分析
一 前记: c语言中需要用到随机值得时候,每次都自己写,这样太浪费效率了,这次遇到了一个经典的代码,就珍藏起来吧. 二 实例分析: 1 #include <stdio.h> 2 3 int ...
- HDU 2056:Rectangles(两个矩形交点的性质)
一.原题链接 Problem - 2056 (hdu.edu.cn) 二.题面 Given two rectangles and the coordinates of two points on th ...
- Mac安装Tomcat的Home路径
首先,强推mac上的一个软件Homebrew,安装好以后,再安装其他软甲就只是 "brew install 软件名"这么简单了. 正文: 我安装tomcat使用的是命令行操作的,也 ...
- [503. 下一个更大元素 II] 单调栈
import java.util.ArrayDeque; import java.util.Deque; class Solution { public static void main(String ...
- 实时云渲染 VS 本地渲染,全面横向对比
不少用户不能理解,为什么要选用实时云渲染,而不用本地的电脑进行渲染显示?本文将通过各个方面来对比两种模式的优劣支持,帮助您更全面了解实时云渲染和本地渲染. 一.便携性对比 由于GPU对机箱空间有要求, ...
- 开发必会系列:hibernate事务
一 事务定义及特性 1.数据库事务的定义:数据库事务(Database Transaction) 是指由一个或多个SQL语句组成的工作单元,这个工作单元中的SQL语句相互依赖,如果有一个SQL语句执 ...
- Oracle 几种行转列的方式 sum+decode sum+case when pivot
原始数据: 方式一: select t_name, sum(decode(t_item, 'item1', t_num, 0)) item1, sum(decode(t_item, 'item2', ...