【问题标题】:Using Roslyn for VS2015 Custom Editor将 Roslyn 用于 VS2015 自定义编辑器
【发布时间】:2015-09-25 21:34:43
【问题描述】:

我正在构建一个 Visual Studio 2015 自定义编辑器(不是代码编辑器扩展,一个完全自定义的 WPF 控件)来编辑 .cs 文件。我真的不确定在这里使用 .NET 编译 SDK 的正确方法是什么。

到目前为止我已经尝试过:

  • 获取工作区->解决方案->项目并使用传递给我的编辑器工厂的文件路径查找打开的文件。当然,如果文档不是解决方案的一部分,您将一无所获。
  • 通过从文本缓冲区中提取数据并构建我自己的隔离语法树来解析原始源代码。

我现在所做的一切都感觉不干净。有没有更直接的方法来访问编辑器文档的编译器 API?

【问题讨论】:

  • 您能详细说明您要达到的目标吗?您当前可以访问 VS 文本缓冲区并且您正在尝试获取它的文档?

标签: visual-studio-2015 roslyn visual-studio-extensions


【解决方案1】:

我可能对您的问题的解释有误,但我会试一试。听起来您正在尝试查找给定文本缓冲区的 Roslyn 文档。

实际上有一整套扩展方法可以更轻松地弥合 Roslyn 和 Visual Studio 对象之间的差距。

见:Microsoft.CodeAnalysis.Text.Extensions

虽然Microsoft.CodeAnalysis NuGet 包不附带它们,但您必须通过以下方式安装它们:

Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text -Version 1.0.0

给定 ITextSnapshotITextBuffer 这些方法将允许您将它们映射回原始 Roslyn 文档(如果存在)。

欲了解更多信息:https://joshvarty.wordpress.com/2015/07/06/lrn-quick-tip-bridging-visual-studio-and-roslyn/

【讨论】:

  • 这听起来像我需要的,有机会我会尽快更新。
  • @Paul:不;这不是你需要的。如果您正在制作自定义编辑器,则根本没有 TextBuffer。我假设您拥有的只是 HierachyItem 或 ProjectItem。
  • 如果他尝试的方法之一是直接从文本缓冲区解析文本,听起来他可以访问 TextBuffer 或某种快照。
【解决方案2】:

需要使用现有的库存工作区,否则您将无法获得引用,更重要的是,不会获得预处理器符号(这会影响语法树的形状)。

请注意,VS 可以有几个不同的工作区,包括用于当前解决方案的主要VisualStudioWorkspace,用于其他文件的MiscellaneousFilesWorkspace,以及其他一些与调试器相关的文件。 (full list)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多