问题标签 [microsoft.codeanalysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
129 浏览

.net - 如何在解决方案中获取所有分析器规则

我在我的解决方案中通过 NuGet 添加了一些分析器。如何从 NuGet 引用中获取所有添加的分析器规则?我需要所有启用的分析器的 ID(例如 CA1001)和描述。

编辑:我需要一些 C# 代码来做到这一点。

0 投票
2 回答
40 浏览

c# - 获取 ImplicitObjectCreationExpression 的类型

如果我有一个ImplicitObjectCreationExpression,我怎样才能得到正在使用创建的类型SemanticModel

我的代码:

0 投票
1 回答
82 浏览

c# - 在 Roslyn 中将 DeclaredAccessibility 转换为 C# 字符串

我想在我的代码生成器中实现接口,所以我需要将Microsoft.CodeAnalysis.Accessibility(即 from ISymbol.DeclaredAccessibility)转换为它们表示的修饰符关键字。

此枚举用于代码分析 API 中,用于描述类或其成员的访问修饰符。

例如,如果你有public void MyMember()它的ISymbol.DeclaredAccessibility意志Accessibility.Public。我需要创建这样一个方法声明,因此我需要一种转换Accessibility.Public为的方法public等等(请注意,ToLower这只适用于简单的情况,它不会生成protected internal)。

正确的方法是什么?

0 投票
1 回答
60 浏览

c# - 值类型中的运算符解析问题(未添加参考)

我正在做一个项目,我发现我使用的运算符和我声明的运算符不相等。

在此处输入图像描述

我做了一个最小可重现的例子:

参见 .NET Fiddle!

为什么这些看起来相同的运算符不表明它们是相等的?

0 投票
1 回答
84 浏览

roslyn - Roslyn CodeFix - MSBuild 属性/元数据和单元测试

我正在构建一个 roslyn 分析器/代码修复程序,但我不想访问 MSBuild 属性和元数据(来自 Directory.build.props 和 .csproj)以了解如何应用代码修复程序。我只在源代码生成器中找到了文档,但在分析器中却没有。

更具体地说,我想知道项目是否配置为使用新的 ImplicitUsings,但也可以访问所有内容。

另外,我们有什么方法可以让所有项目全局使用吗?

并且使用新的 Microsoft.CodeAnalysis.Testing 如何添加 MSBuild 属性以便我可以实际测试它?

问候。

0 投票
1 回答
91 浏览

c# - 做model.GetDeclaredSymbol时如何获取SynthesizedIntrinsicOperatorSymbol而不是SourceUserDefinedOperatorSymbol

我在这个问题中看到的操作员解析遇到了麻烦(看看这个.NET fiddle)。

总之,我有如下代码:

但是当我GetDeclaredSymbol在操作符的声明中IMethodSymbol使用它时,它给了我与在第一行(bool a = 3 > 5;)中使用它时不同的情况。

我一直在寻找一种类似的方法,GetDeclaredSymbol但它会生成代码中使用的与声明中相同的符号。

实际的

  • GetDeclaredSymbol->SourceUserDefinedOperatorSymbol
  • GetSymbolInfo->SynthesizedIntrinsicOperatorSymbol

通缉(预期)

  • GetDeclaredSymbol->SynthesizedIntrinsicOperatorSymbol
  • GetSymbolInfo->SynthesizedIntrinsicOperatorSymbol

基本上,我需要一种SourceUserDefinedOperatorSymbolSynthesizedIntrinsicOperatorSymbol.

例如。

0 投票
0 回答
46 浏览

roslyn - 如何在 Roslyn 中使用分析器和 CodeFixes

我正在使用 Angular 客户端开发一个 ASP .net 5 Web 应用程序,其中除了许多设置之外,还有一个基于 monaco 的 C# 脚本编辑器(ngx-monaco-editor)。通过 LSP 的套接字通信正在运行,并且通过 Roslyn 的简单代码完成也正在运行。

我创建一个 AdHocWorkspace,插入一个项目和文档,然后我调用

调用完成。

但是,我无法通过 Roslyn 使用 Analyzer 或 CodeFixes,因为所有类都标记为内部,我什至找不到它的公共 API。在 OmniSharp 中,通过反射为此调用内部方法,但我不想相信实际上没有为此提供公共 API。

因此,我的问题是,我怎样才能干净地包含分析器或CodeFixes。可能我可以通过 MEF 获得课程吗?但是为此,我需要公共接口,但我找不到。

0 投票
0 回答
88 浏览

c# - 如何在 C# 中查找对枚举值的 .ToString() 调用

我正在尝试使用 Roslyn 分析器来查找使用.ToString()枚举值的所有实例,以便我可以建议一个代码修复来改用该nameof()表达式。我该怎么做呢?对于字符串插值场景,我已经以一种过于复杂的方式艰难地完成了它,但对于下面列出的其他场景,我仍然需要这样做。

这是我到目前为止所拥有的。这行得通,但肯定可以做得更好

我觉得我应该能够通过在 上注册一个动作来做一些事情SyntaxKind.InvocationExpression,检查被调用的方法是.ToString(),并且它是在枚举值上被调用的。有可能这样做吗?这会捕捉到上面我没有明确使用的场景.ToString()吗?如果没有,实现这一目标的最佳方法是什么?

0 投票
1 回答
101 浏览

c# - 确定是否使用 Roslyn 读取私有字段

我整天都在搜索并阅读了很多帖子,但我不能完全得出结论。我正在尝试创建一个 Roslyn 分析器以在未读取私有字段时报告诊断。注册语法动作并找出它是否是私有的真的很容易。但是现在我一直在试图找出该领域是否在课堂上被阅读。

假设我们有以下示例代码:

有几个例子可以说明我希望在哪里标记(初始化与否、注入与否、单行上的多个声明等),但我认为它们可能不是说明问题所必需的。

我到目前为止是这样的:

我只是无法弄清楚如何使该IsFieldRead()方法起作用。这真的感觉像是应该很容易做到的事情,但我就是不能完全理解它。我认为获取方法并为我的领域分析这些方法以查看它是否被读取将是一个不错的主意,但这并不包括该字段是否被另一个私有字段读取,而且我无论如何都无法让它工作。:)

0 投票
0 回答
145 浏览

visual-studio - Visual Studio 编辑器配置和代码分析令人沮丧

近年来,我使用规则集文件进行代码分析,通过项目的 Properties -> Code Analysis 选项卡进行配置。我最近开始创建一些此选项不再可用的 .Net 5 项目,因此我决定尝试改用 .editorconfig 文件,但我发现整个代码分析体验非常令人沮丧。

我已将 .editorconfig 文件添加到解决方案的根文件夹,并将其添加到解决方案本身,它出现在“解决方案项目”文件夹中。我可以双击该文件,这会打开一个基于网格的 GUI“编辑器”,但我经常发现当我进行更改然后单击“保存”时没有任何反应——文件没有更改。不过,这似乎有点命中注定,这表明 VS 中存在错误。

我还在StyleCop.Analyzers我的项目中添加了 NuGet 包,它在编辑器的“分析器”选项卡中添加了额外的“SAxxxx”和“SXxxxx”规则。同样的规则也出现在每个项目下,在 \Dependencies\Analyzers\StyleCop.Analyzers 中。但是在这里我不能改变规则的严重性。我应该可以吗?当我尝试时,它有时会显示一条错误消息,说它找不到要更新的规则集,而在其他时候什么也没有发生并且严重性保持不变。

此外,当我使用规则集时,规则集编辑器列出了许多 IDExxxxx 规则,但我在新的 .Net 5 解决方案中的任何地方都看不到这些 - 它们不在 editorconfig 编辑器中,也不在项目下分析器列表。这些都去哪儿了?

我发现整个代码分析体验非常令人沮丧和困惑。只是我,还是我对 editorconfig 和代码分析的用途不了解?