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/