问题标签 [roslyn-code-analysis]
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.
c# - 从 Roslyn API 中提取代码作为纯字符串
我们的目标是使用 Roslyn 为 C# 类构建一个玩具抽象语法树。我们只想展示一个类的基本结构,而不是遍历整个 AST。例如(取自 MSDN):
让我们只考虑属性Hours
;我们只对提取修饰符 ( public
)、返回类型 ( double
)、标识符 ( Hours
) 的标记感兴趣,而对于两个访问器的主体,我们想直接将其提取为String
.
但是,当我们通过 roslyn(显示在屏幕转储中)时,当我们获取访问器的主体时,我们没有找到代表整个字符串的字段。实现这一目标的正确方法是什么?
c# - Roslyn - 抛出构建错误
查看 Roslyn 的文档,我找不到任何关于构建失败的信息。我目前已经构建了一个分析器工具,它将查看方法是否缺少标记,并通知开发人员建议添加此标记。但是我想要做的是,如果他们尝试构建项目,则能够使构建失败。
我在网上看到了开发人员一直在使用的地方:CodeIssue
但我认为这行不通。
这类似于 stylecop 在构建失败时的工作方式。
有没有人找到任何可以返回构建失败并出现错误的示例/资源?
c# - Roslyn,在代码修复后无法让提供商更新解决方案
我创建了一个分析器,它将检测一个方法是否在 xml 中不包含<createddate>
标签,以及一个将注入此标签的提供程序。它工作正常并插入标签,但即使规则已修复,它仍然返回构建错误。我确实认为我可能需要使用语义模型?
这就是我所拥有的:CodeFixProvider.cs
和 DiagnosticAnalyzer.cs
当标签出现在 xml 中时,关于如何让构建通过的任何想法?似乎它并没有真正更新解决方案?
c# - CSharpAddImportCodeFixProvider 遇到错误并已被禁用
我让我的电脑为我重新成像。我的计算机上安装了 Visual Studio 版本 14.0.25123.00 Update 2。当我尝试使用 VS intellisense 引用另一个项目时出现此错误。
CSharpAddImportCodeFixProvider 遇到错误并已被禁用
我有两个项目。其中之一使用命名空间ProjectName.Web
。而另一个项目使用ProjectName.Web.Controllers
. 提供者在我引用时崩溃ProjectName.Web.Controllers
,我相信是因为它是作为一个项目设置的。知道如何解决这个问题吗?
c# - 使用 Roslyn CodeFixProvider 向方法添加参数
我正在编写一个Roslyn 代码分析器,我想确定一个async
方法是否不采用 a CancellationToken
,然后建议一个添加它的代码修复:
我已DiagnosticAnalyzer
通过检查 连接正确报告诊断methodDeclaration.ParameterList.Parameters
,但我找不到用于将 a 添加Paramater
到ParameterList
内部的 Roslyn API CodeFixProvider
。
这是我到目前为止所得到的:
如何正确更新方法声明并返回更新的Document
?
c# - 使用 Roslyn CodeAnalyzer 将命名空间添加到类
Piggy backing off使用 Roslyn CodeFixProvider 将参数添加到方法中,
我正在努力创建一个CodeFixProvider
确保所有异步方法都采用的CancellationToken
:
我可以将参数添加到方法中,但我必须使用Type.FullName
. 相反,我想System.Threading
在类文件的顶部添加一个 using 语句,这样该方法就不需要使用完整的命名空间。换句话说:
如何将using语句添加到 a 中Document
?
我尝试了几种方法,但是当我替换SyntaxTree
引用中的多个节点时它会丢失(因为树是不可变的并且在每次更改时都会重建)。
我能够使用下面的代码使其部分工作,但这仅在填充属性时才有效,当 using 语句位于命名空间之后CompilationUnitSyntax.Using
时,情况并非如此。这也依赖于文件中至少有一个语句。 using
有一个更好的方法吗?
c# - 从 HandleTypeDeclaration(...) 中的 SyntaxNodeAnalysisContext 获取封闭类型
我的分析仪我有以下注册:
在HandleTypeDeclaration
我想访问分析器当前正在处理的类型,以检查该类型是否由我想用来标记不应分析的类型的某个属性归因(如在这个问题中)。
在我的本地窗口中,我看到SyntaxNodeAnalysisContext context
有一个名为的属性ContainingSymbol
,但是该成员没有出现在 Intellisense 中。我想出了猜测var x = ...
,但它总是等价的吗?我怎样才能ContainingSymbol
访问context
?这是获得封闭类型的正确方法吗?
c# - 在 SyntaxTreeAnalysisContext 上获取语义模型
我得到了 aSyntaxTreeAnalysisContext context
但我需要的是 aSyntaxNodeAnalysisContext
及其SemanticModel
属性,以便随后上升到作为类声明的父节点,然后检查在该类型上放置了哪些属性。
有没有办法从SyntaxTreeAnalysisContext
到SyntaxNodeAnalysisContext
?
(编辑)举个例子:我想增强一些规则(它们都使用 ; 的ReportDiagnostics
方法,SyntaxTreeAnalysisContext
例如SA1027从 StyleCop 分析器中正确使用选项卡),以便我可以在封闭类型上放置一个属性并检测它的存在和然后省略报告诊断,如
c# - 如何在 Roslyn 的整个解决方案中找到特殊文件?
我正在编写Roslyn的特定规则。
在此规则中,分析器正在解析方法声明及其在整个解决方案中的引用SymbolFinder
。
我的一个要求是找到一种方法来理解解决方案 [有多个项目] 是 Asp.Net Webform 或 Roslyn 的 Asp.MVC。
基于我们的项目,为此,我需要在整个解决方案中找到一个名为“Web.SiteMap”的文件,
如果这个文件存在,我可以理解这个项目是 Webform 类型,否则是 MVC。
我在徘徊我怎么能在 C# 中由 Roslyn 做到这一点?
c# - 在不构建解决方案的情况下运行 StyleCopAnalyzers
我想使用 StyleCopAnalyzers https://github.com/DotNetAnalyzers/StyleCopAnalyzers在我的代码中查找 StyleCop 违规。但是,如果不构建整个解决方案,我找不到运行它们的方法。这甚至可能吗?