首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在DiagnosticAnalyzer和CodeFixProvider中访问工作区?(Roslyn)

在DiagnosticAnalyzer和CodeFixProvider中访问工作区,可以通过以下步骤实现:

  1. 首先,确保你的项目中已经引用了Microsoft.CodeAnalysis和Microsoft.CodeAnalysis.CSharp(或Microsoft.CodeAnalysis.VisualBasic)的NuGet包。
  2. 在DiagnosticAnalyzer中,你可以通过重写AnalyzeSyntax方法或AnalyzeSemanticModel方法来访问工作区。这两个方法分别用于分析语法和语义模型。
  3. 在AnalyzeSyntax方法中,可以通过传入一个SyntaxNodeAnalysisContext对象来访问工作区。可以使用该对象的方法和属性来获取当前分析的语法节点、语法树、语法模型、文档等信息。例如,可以使用context.Node获取当前分析的语法节点,使用context.SemanticModel获取语义模型。
  4. 在AnalyzeSemanticModel方法中,可以通过传入一个SemanticModelAnalysisContext对象来访问工作区。可以使用该对象的方法和属性来获取当前分析的语义模型、语法树、文档等信息。例如,可以使用context.SemanticModel获取语义模型,使用context.Node获取当前分析的语法节点。
  5. 在CodeFixProvider中,可以通过重写RegisterCodeFixesAsync方法来访问工作区。该方法会在代码修复提供程序注册代码修复操作时被调用。
  6. 在RegisterCodeFixesAsync方法中,可以通过传入一个CodeFixContext对象来访问工作区。可以使用该对象的方法和属性来获取当前分析的语法节点、语法树、语义模型、文档等信息。例如,可以使用context.Document获取当前分析的文档,使用context.Span获取当前分析的代码范围。

总结起来,通过重写DiagnosticAnalyzer和CodeFixProvider中的方法,并通过传入相应的上下文对象,可以在这些类中访问工作区的各种信息,包括语法节点、语法树、语义模型、文档等。这样可以实现对代码进行静态分析和修复的功能。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云开发者工具包(SDK):https://cloud.tencent.com/document/product/876
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云音视频处理(MPS):https://cloud.tencent.com/product/mps
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于 Roslyn 同时为 Visual Studio 插件 NuGet 包开发 .NETC# 源代码分析器 Analyzer 修改器 CodeFixProvider

本文将教大家如何从零开始开发一个基于 Roslyn 的 C# 源代码分析器 Analyzer 修改器 CodeFixProvider。...无论哪一种,你都可以在支持 Roslyn 分析器扩展的 IDE( Visual Studio)获得如下面动图所展示的效果。...开发准备 安装 Visual Studio 扩展开发工作负载 你需要先安装 Visual Studio 的扩展开发工作负载,如果你还没有安装,那么请先阅读以下博客安装: 如何安装准备 Visual...如下图所示: 你可能会觉得有些不满,看起来似乎只有我们写的那些标题描述在工作。...我将在其他的博客说明如何编写使用分析器项目的单元测试。

39120

使用 Roslyn 分析代码注释,给 TODO 类型的注释添加负责人、截止日期 issue 链接跟踪

本文将基于 Roslyn 开发代码分析器,要求所有的 TODO 注释具有可被跟踪的负责人等信息。...预备知识 如果你对基于 Roslyn 编写分析器代码修改器不了解,建议先阅读我的一篇入门教程: 基于 Roslyn 同时为 Visual Studio 插件 NuGet 包开发 .NET/C# 源代码分析器...Analyzer 修改器 CodeFixProvider - walterlv 分析器 我们先准备一些公共的信息: namespace Walterlv.Demo { internal static.../// public const string TodoMustBeTracked = "WAL302"; } } 在后面的代码分析器修改器,我们将都使用此公共的字符串常量来作为诊断...我们从语法树的 DescendantTrivia 方法可以拿到文档的所有的 Trivia 然后过滤掉获得其中的注释部分。

31320

使用 Roslyn 对 C# 代码进行语义分析

而使用语义分析,你可以像在运行时使用反射一样,在编译时访问源代码的各种类型、属性、方法等,特别适合用来分析引用、生成代码等。当然,实际项目里面将两者结合起来可以做到更多的效果。...关于代码分析器(Analyzer)修改器(CodeFix)可以参考我之前的这些博客: 可参考:基于 Roslyn 同时为 Visual Studio 插件 NuGet 包开发 .NET/C# 源代码分析器...Analyzer 修改器 CodeFixProvider - walterlv 可参考:使用基于 Roslyn 的 Microsoft.CodeAnalysis.PublicApiAnalyzers...来追踪项目的 API 改动,帮助保持库的 API 兼容性 - walterlv 可参考:使用 Roslyn 分析代码注释,给 TODO 类型的注释添加负责人、截止日期 issue 链接跟踪 - walterlv...例如,拿到一个语法树(SyntaxTree)的类型定义,可以用下面的方法: 1 2 3 4 // 遍历语法树的所有节点,找到所有类型定义的节点。

34920

.Net 编译器平台 --- Roslyn

但是,不需要终端用户预览版,可以独立于Visual Studio在自己的应用程序中使用Roslyn API。 API 层 Roslyn由两个主要的API层组成——编译器API工作API。...使用工作 工作层是对整个解决方案进行代码分析重构的起点。...在该层工作 API 帮助您将解决方案中所有项目的信息组织成单一的对象模型,为您提供直接访问编译器层对象模型(源代码文本、语法树、语义模型编译)的能力,无需解析文件、配置选项或管理项目间的依赖关系...工作提供对解决方案的当前模型的访问。当宿主环境发生变化时,工作会触发相应的事件,并更新CurrentSolution属性。...5.png 总结 Roslyn 提供了一套编译器 API 工作 API,可以提供有关您的源代码的丰富信息,并与 C# Visual Basic 语言完全兼容。

23830

Roslyn 如何获得一个类的引用

本文告诉大家如何在 Rosyln 编译一个文件,获得这个文件的类的命名空间 在 C# 代码里面,大部分的代码都是在开始定义了 using 引用命名空间,本文将告诉大家如何使用 Roslyn 分析获取类文件里面引用的命名空间...在开始之前,先使用 NuGet 安装必要的库, Microsoft.CodeAnalysis.Compilers 库。...使用继承 CSharpSyntaxWalker 的类作为辅助类,通过访问者模式的方法去读取,就是 Roslyn 开发推荐的方法 调用 Visit 方法就可以开始进行语法分析,或者进行语法修改添加代码等...VisitUsingDirective 将会进来 6 次,分别是以上的各个 using 语句 详细还请拉下代码,在 VisitUsingDirective 方法添加断点 本文所有代码放在 github ...请看 手把手教你写 Roslyn 修改编译 本文会经常更新,请阅读原文: https://blog.lindexi.com/post/Roslyn-%E5%A6%82%E4%BD%95%

1.2K20

手把手教你写 Roslyn 修改编译

Roslyn 如何使用 MSBuild Copy 复制文件 本文告诉大家如何在 MSBuild 里使用 Copy 复制文件 Roslyn 使用 Target 替换占位符方式生成 nuget 打包 本文告诉大家如何编写在编译过程修改打包文件...只需要在项目文件夹,或者磁盘的文件夹, E:\ 放下本文提供的 Directory.Build.props 文件,整个文件夹内的控制台项目就会输出 林德熙是逗比 想要知道是怎么做的,请看下面 Roslyn...Roslyn 通过 nuget 统一管理信息 在日常的开发,如果需要发布多个库,多个库之间的版权作者等信息都是相同的。如果需要每次更改信息都打开项目进行编辑,这个效率是很低的。...Roslyn 节点的 Span FullSpan 有什么区别 本文告诉大家在使用 Roslyn 分析代码时,使用的 Span FullSpan 有什么区别 Roslyn 在项目文件使用条件判断...本文告诉大家如何在项目文件通过不同的条件使用不同的方法运行

2K20

理解 Roslyn 的红绿树(Red-Green Trees)

Roslyn 的设计理念 Roslyn 一开始就将漂亮的 API 作为目标的一部分,同时还要非常高的性能;所以 Roslyn 的开发团队需要找到一种特殊的数据结构来描述语言( C#)的语法。...这种数据结构要满足这些期望的要求: 不可变(Immutable) 树的形式 可以容易地访问父节点子节点 可以非常容易地将任何一个节点对应到源代码文件的一段文本区间 可重用(Persistent) 最后一个的英文说法是...Roslyn 的设计中有一个重要的业务需求,希望能够分析源代码文件并在开发者编辑的过程不断提供建议。也就是说,当我们连续不断地去修改源代码的文本内容时,Roslyn 也需要具备很高的性能。...既然要容易地访问到父节点子节点,那么我们是先构造父节点还是子节点呢?如果先构造父节点,那子节点还没有创建出来;而先构造子节点,那父节点就没构造出来。...这两棵树设计起来协同工作,前者负责解决 Roslyn 语法分析的性能问题,后者负责对开发人员提供友好的 API 调用。

99210

Compilify——让你在浏览器编译.NET代码

此窗口提供了一种替代环境,以便在开发的项目上来执行个别语句,并直接得到结果。 Compilify使.NET编译器成为完全便携式的,而且可通过快捷的接口访问,从而促进共享和协作。...执行结果被序列化,并返回给工作服务器。我在单独的线程执行这些工作,以便万一耗时太久(目前设置的时间限制是5秒)我可以取消处理。...用于AppHarbor的附加组件New Relic确实可以让我轻松监视Web服务器后台工作服务器的负载。...译注 [1] Roslyn CTP,传统上,编译器都是黑盒——源代码从一端进入,然后对象文件或程序集从另一端出来。Roslyn项目通过开放VBC#编译器改变了这种模型。...通过微软的“Roslyn”CTP(即Community Technology Preview,社区技术预览版)版可预览新的语言对象模型,该模型用于代码生成、分析重构,还有即将到来的脚本支持、及C#与VB

1.2K80

译 | 使用Roslyn分析器高效编写更好的代码

要了解有关我们最喜欢的 Roslyn 分析仪的详细信息,请访问我们的 Roslyn 分析器 GitHub 仓库。...表示警告 圆圈的"x"表示严重 浅色背景上圆圈的"i"表示隐藏的严重 圆圈的"*"表示忽略的诊断 ? 然后,可以从解决方案资源管理器设置规则集严重性。在解决方案资源管理器,展开依赖项分析器。...如果将规则严重性设置为警告,则会在代码收到该特定规则集的警告。 ? 现在,您已经了解了分析器的工作原理,您可以提高工作效率,更快地编写更好的代码!...问:我应该使用 Roslyn 分析器还是 .editorconfig 规范代码样式? 答:Roslyn 分析器 .editorconfig 文件是齐头并进的。...在 .editorconfig 文件或文本编辑器选项页上定义代码样式时,实际上正在配置内置于 Visual Studio Roslyn 分析器。 问:分析器在持续集成 (CI) 生成工作吗?

2.3K30

Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码

当然,如果你只是做一些特定的事情,当然不需要安装这么全的 NuGet 包,像 Roslyn 静态分析 - 林德熙 的 demo Roslyn 编译与执行 - 吕毅 的教程就不需要安装所有 NuGet...在访问者模式,由于 C# 的语法在一个 C# 版本发布之后就会确定,其中各种各样类型的语法对应访问者模式的各种不同类型的数据,Roslyn 为我们构建的语法树对应访问者模式需要访问的庞大的数据结构...访问泛型参数 现在,我们继续在之前打开解决方案项目文件的代码后面增添代码: // 从我们一开始打开的项目文件获取语法树。...访问泛型参数。其中 1 3 写在一个方法,2 是一个新类。 分析这个泛型参数 直到现在,我们所写的任何代码都还只是为了使使用 Roslyn API 的代码能够跑起来,没有进行任何实质上的分析。...TypeParameterVisitor VisitTypeParameterList(用于遍历修改语法树的泛型参数列表) 以上便是分析修改 Roslyn 语法树的简单实例了,我将整个

1.7K10

IIncrementalGenerator 增量 Source Generator 生成代码入门 判断程序集之间的 InternalsVisibleTo 关系

本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何判断两个程序集之间是否存在 InternalsVisibleTo 关系...InternalsVisibleTo 关系 这个 GivesAccessTo 方法可以获取到当前的程序集对给定的程序集参数是否为 internal 可见 以下是详细的例子代码 本文的例子的任务是编写一个 Roslyn...App Lib1 Lib2 项目 在 Lib1 Lib2 里面存放一些 internal 的类型,这两个项目将被当成类库项目被 App 项目所引用。...回到咱这个例子的任务上,就是在 Analyzers 分析器项目编写代码,分析 App 项目所引用的程序集里面的存在哪些程序集对 App 程序集设置了 internal 可见 完成准备工作之后,接下来开始本文的核心逻辑编写.../lindexi_gd.git git pull origin e0748230af39e712b77e72f2dbb6bef4453b0c84 以上使用的是 gitee 的源,如果 gitee 不能访问

22520

苏州 开源自主的 dotnet 生态

而基于 dotnet 的上层应用的框架, WPF WinForms ASP.NET Core 等都是基于 MIT 协议开源的 在开源的世界里面,采用 MIT 协议是最友好的,意味着使用方无任何版权费用问题...此时可以加上 dotnet runtime 仓库的截图 现在有大量的上层应用框架都选择了开源贡献,整个国内的 dotnet 组织 https://github.com/dotnetcore/ 老张的包含了一些新鲜的...在 2020 年,其实自己基于开源的 Roslyn 定制一个属于自己的编译器没有想象那么难,而 Roslyn 编译器的开源协议是最友好的 MIT 协议,这意味着咱可以对整个开源仓库进行自由的更改 (这将允许任何人任何组织企业任意处置...唯一的限制是,软件必须包含上述版 权许可提示,后者协议将会除了为用户提供版权许可之外,还有专利许可,并且授权是免费,无排他性的(任何个人和企业都能获得授权)并且永久不可撤销,用户使用完全不用担心收费问题版权问题...2014年以来已经有众多知名公司加入.NET基金会, 仅在平台项目中,.NET平台上有大量贡献者其实不在Microsoft工作

95720

使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到MonoJexus

编译,并发布到jexus,访问之。报出的错误信息如下图。 ? Could not find file "/var/www/mvcdemo/bin\roslyn\csc.exe"....这一行告诉了我们找不到roslyn 的c# 编译器, 当前版本的Mono 的编译器还是Mono的mcs编译器,并没有完成到roslyn 这个编译器的升级工作,这个工作正在进行过程,在不远的将来就可以统一使用...roslyn。...其他的兼容性问题都是Windows/Linux的差异,比如大小写路径问题等,例如从Nuget上下载下来的System.Web.Webpages.dll 几个相关的dll 中间的pages 那个p是小写的...在jexus,只需要把 /usr/jexus/jws这个脚本文件的 “export MONO_IOMAP=...”这一句前边的“#”去掉,就可以不区分大小写了。

1.9K100

roslyn 生成代码_delphi反编译为源码

Roslyn 是微软公司开源的 .NET 编译器。编译器支持 C# Visual Basic 代码编译,并提供丰富的代码分析 API。...、Microsoft.CodeAnalysis.CSharp、Microsoft.CodeAnalysis.VisualBasic组件以后, 便可以在C#项目VB项目中使用Roslyn的API。...Execute方法来实现在项目的代码实现期动态的编译我们输入的C#代码, 编译后的代码似乎并不嵌入到原代码(编译以后),所以我们需要指定引入代码需要的AssemblyNamespace, AddReferenceAndNameSpace...下面写个简单的测试代码来测试上面的编译器是否可以正常工作。...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

44820

Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码

不过,在那篇文章,我写了一个应用程序来完成这样的事情。我在另一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包 说到我们可以将这样的应用程序打包成一个 NuGet 工具包。...于是,我想到可以使用 Roslyn。在项目中编写一段转换代码,我们使用通用的方式去编译执行这段代码,以便完成各种各样日益增加的类型转换需求。...准备工作 与之前在 Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码 的不同,我们这次无需打开解决方案或者项目,而是直接寻找并编译源代码文件。...准备一份用于编译执行代码文件 我直接使用 生成代码,从 T 到 T1, T2, Tn —— 自动生成多个类型的泛型 这篇文章的例子。把其中最关键的文件拿来用于编译生成试验。...如果你想实现本文开头所说的更通用的效果,欢迎发动你的大脑让想象力迸发。当然,如果你确实想不出来,欢迎在下方评论,我将尽快回复。

1.3K10

IIncrementalGenerator 增量 Source Generator 生成代码入门 从语法到语义 获取类型完全限定名

本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何从语法分析过程,将获取的语法 Token 转换到语义分析上,比如获取类型完全限定名...可通过阅读 Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码(语法分析) - walterlv 使用 Roslyn 对 C# 代码进行语义分析 - walterlv 博客对此进行了解...通过此快速判断逻辑即可过滤掉不需要处理的信息,从而减少后续需要处理的工作量,提升性能。...在 Roslyn 里面的设计就是缓加载方式, Linq 一样,只有在需要用到的时候才执行 为了让以上的委托能够被执行,添加 RegisterSourceOutput 用来让底层执行委托内容,代码如下.../lindexi_gd.git git pull origin d1197778d4a96524de210e44a662331e7340a720 以上使用的是 gitee 的源,如果 gitee 不能访问

66930

使用 Roslyn 编译器服务

.NET Core .NET 4.6 的C# 6/7 的编译器Roslyn 一个重要的特性就是"Compiler as a Service",简单的讲,就是就是将编译器开放为一种可在代码调用的服务..., 通常在工作流引擎 或是规则引擎中都需要一项功能是计算表达式, 在没有Roslyn 之前我通常借助于Antlr [Antlr(“又一个语言识别工具”的缩写)是一个最初用Java编写的库,可以根据特殊的语法...要在自己的代码中使用Roslyn 执行C#脚本,首先进行如下几步准备工作。...究其原因,是因为CSharpScript.RunAsync 函数每次都是在一个单独的上下文中执行的,并不会前面的语句产生关联。...Roslyn提供了一个更为简单有效的解决办法:在会话传入一个宿主对象,会话的脚本程序也能访问宿主对象的各成员变量。

1.2K80

Roslyn 如何使用 MSBuild Copy 复制文件

本文告诉大家如何在 MSBuild 里使用 Copy 复制文件 需要知道 Rosyln 是 MSBuild 的 dotnet core 版本。...里可以使用很多命令,本文告诉大家如何使用 Copy 这个 Task 来复制文件 在开始本文之前,希望大家已经知道了一些关于 csproj 文件格式,如果还是不知道,请看理解 C# 项目 csproj 文件格式的本质编译流程...对于复制资源文件或需要编译的资源,就设置 BeforeTargets 在编译前,如果是不需要进行编译的文件, dll 就可以设置在编译后运行。 重新生成项目,可以看到文件夹存在文件 ?...使用数组的方法是 @(Txt) ,通过 @ 标签名就可以拿到标签的文件。...MSBuild Target(Exec)的控制台输出 - walterlv 更多关于 Roslyn 请看 手把手教你写 Roslyn 修改编译 参见:专栏:Roslyn 入门 - CSDN博客 --

1.4K30
领券