问题标签 [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 投票
1 回答
42 浏览

roslyn - Roslyn:从 CFG 中的 BasicBlocks 重构代码

在 Roslyn 中,控制流图具有构成程序的BasicBlock列表。是否可以从每个块中获取代码语句来重构整个代码?

0 投票
1 回答
279 浏览

c# - SonarQube 找不到 Microsoft.CodeAnalysis 1.3.1.0 但已安装

我试图在我的 C# 项目上运行 SonarQube 扫描。我有 3 个项目和 1 个解决方案文件。

我跑:

然后我在我的cmd上看到:

一切似乎都很好,但突然间我收到了 1000 多个这样的警告:

我已经使用 NuGet 管理器在我的所有 3 个项目上安装了 Microsoft.CodeAnalysis v 1.3.1。

我错过了什么?

我正在使用 .NET Framework 4.8、MSBuild 14.0、Visual Studio 2019

0 投票
0 回答
205 浏览

c# - 使用 Microsoft.CodeAnalysis/Roslyn 获取 XML 文档

我正在尝试使用 获取被调用方法的 XML 文档Microsoft.CodeAnalysis,即使此方法是在先前编译的库中定义的。

如果我有一个SymbolAnalysisContext或一个ISymbol. ISymbol具有GetDocumentationCommentXml()返回 xml 字符串的方法。

我的问题是,我找不到被调用方法的 ISymbol 方法。
我正在使用操作操作来查找所有表达式语句,这就是我如何OperationAnalysisContext为每个匹配的表达式获取一个。
在这一点上,我被困住了。

我正在尝试获取SyntaxTree包含类/命名空间或直接获取符号。但我不确定这是否是正确的方法。XML 文档存储在 XML 文档文件中,而不是(反编译的)程序集中。你有什么建议吗?我不需要一个完整的解决方案,但是一些如何到达那里的提示会非常好。

更新:
经过几天的研究,roslyn 编译器似乎并不关心文档,您必须手动加载它。
这就是为什么我开始搜索包含程序集、加载它并使用Assembly.CodeBase属性来获取 xmldocumentation 的路径的原因。
遗憾的是,既没有包含系统组件旁边的文档的 xml 文件,也没有嵌入的文档(例如 system.private.corelib)。系统程序集包含一个嵌入的 xml 文件,但该文件不包含文档(根元素不是doc,它是linker)。

要使用该Assembly.CodeBase属性,我必须将目标框架从升级.netstandard1.3.netstandard1.5.

我更新了代码示例以代表我当前的状态...

以下是一个说明性示例:

那是我的分析器:

那是一份分析过的文件:

我正在尝试获取 `StreamReader.ReadToEnd() 的整个 XML 文档

编辑:
刚才我发现这个类XmlDocumentationProvider有两个静态方法可以通过传递文件或字节来获取实例,但我不知道如何使用它来实现我的目标......

0 投票
1 回答
370 浏览

c# - 使用 EF 内核运行时编译 DbContext,缺少 Migrator() 的参考

我正在构建一个需要在运行时创建 EntityFrameWorkCore DbContext 然后进行迁移的应用程序,如果我不使用 dbContext.Database.Migrate() 方法,下面的代码将编译并运行,但如果我这样做了,我会得到一个诊断错误关于缺少指令/参考。

错误 CS1061:“DatabaseFacade”不包含“Migrate”的定义,并且找不到接受“DatabaseFacade”类型的第一个参数的可访问扩展方法“Migrate”(您是否缺少 using 指令或程序集引用?)

如果我只是用我的项目中的代码创建一个文件,我也不会收到任何错误。据我所知,“DatabaseFacade”是 EntityFrameWorkcore.Infrastructure 的一部分,如果 Microsoft.EntityFrameworkCore 应该是它的一部分。

这些是我在 CSharpCompiler 中包含的参考:

我正在使用 Microsoft.CodeAnalysis 创建一个 CSharpCompilation,然后发出我在运行时调用 main 方法的程序集。

我什至尝试用反射调用 migrate() 方法来绕过智能,但是 GetMethod("Migrate") 返回 null,所以它显然不存在。

这是我试图编译和使用运行时的代码(简化):

}

0 投票
1 回答
86 浏览

.net - 为什么在 .NET4.6 中很少有分析器规则将其有效严重性设置为抑制

添加代码质量 NuGet 包后,我可以看到默认情况下,某些规则的有效严重性级别设置为抑制。但它们的默认严重性级别仍然是警告。

严重性设置为抑制而不是警告

如何将所有规则的严重性设置为警告?

我尝试在 .csproj 文件中使用 AllEnabledByDefault。但它不起作用。

有什么帮助吗?

0 投票
1 回答
139 浏览

visual-studio-2019 - Visual Studio 2019 和 ReSharper:停用 Studio 代码分析

我安装了 Studio 2019 Community Edition 以及 ReSharper。由于我们使用 ReSharper 进行代码分析,因此我们通过 .editorconfig 仅使用 2 行停用了 Studio 代码分析:

一切正常(在另一台 PC 上仍然如此)。

现在我有了一台新电脑,从头开始安装 Win 10,以及 Studio 和 ReSharper。现在 Visual Studio 总是进行代码分析和评论/建议几个问题。即使我将问题严重性重新配置为无,我的 .editorconfig 也没有任何更改,但仍在分析代码。

如何摆脱 Studio 代码分析?

0 投票
0 回答
34 浏览

asp.net-web-api - 我可以在 ASP.NET Web API 控制器中重新引发异常吗?

我有以下控制器代码:

代码分析器抱怨它并给出以下警告消息:

警告 CA1031
修改“获取”以捕获更具体的允许异常类型,或重新引发异常

看来这个控制器的目的是返回异常而不是重新抛出。我可以用投掷代替这个回报吗?如果我只想重新扔它,那么也许我什至不需要一开始就抓住它。

0 投票
0 回答
45 浏览

azure-devops - 尽管项目在本地正确运行,但 Microsoft.CodeAnalysis 构建失败

在尝试合并开发时,我在 Azure DevOps 中构建时遇到错误:

##[error]CSC(0,0): 错误 CS0006: 元数据文件 '..\packages\Microsoft.CodeAnalysis.Analyzers.1.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll' 不能发现 ##[error]CSC(0,0): Error CS0006: Metadata file '..\packages\Microsoft.CodeAnalysis.Analyzers.1.0.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll'找不到

在构建解决方案时,我的 Visual Studio 中也出现了这个错误,但我重新安装了 CodeAnalysers,它已经消失了。

这是一个 Umbraco 项目(7.15.3),所以它使用版本 1.0.0 分析器。

如果它在我的本地编译正确,我不明白为什么它在 DevOps 中构建失败?

构建步骤是在 YAML 中显示此配置:

有人可以帮忙吗?

0 投票
0 回答
121 浏览

c# - C# Microsoft.CodeAnalysis 中的 System.IntPtr 和 nint

在类型的正常比较中 typeof(nint)==typeof(System.IntPtr)是真的

所以我期待SpecialTypeofSystem.IntPtr就像andnint一样,在使用 进行 CodeAnalysis 时。System.Int32intMicrosoft.CodeAnalysis

但事实证明 System.IntPtr 的 SpecialType 仍然是 System.IntPtr。

这是我的代码

所以我的问题是为什么特殊类型System.IntPtr不在nintCodeAnalysis 中?

PS。我已经浏览了这个文档。我知道“..关键字不仅仅是类型的别名。” 但为什么这是真的typeof(nint)==typeof(System.IntPtr)呢?

0 投票
0 回答
65 浏览

roslyn - Project.GetCompilationAsync() 与 CSharpCodeProvider.CompileAssemblyFromSource() 用于在运行时使用 Roslyn 编译源代码

我继承了一个使用 Microsoft.CSharp.CSharpCodeProvider 的项目,该项目现已成为旧版,因此我已切换到新的 Roslyn 版本 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,如下所述:

问题 50241006

现在我想为我正在编译的项目添加使用 NuGet 包的功能,最好是在 SDK 样式的 .csproj 文件中使用较新的包引用格式。

我的问题是使用 Microsoft.CodeAnalysis 会更好吗?Project.GetCompilationAsync比 CSharpCodeProvider.CompileAssemblyFromSource(),如果是这样怎么办?我说得更好,因为它看起来像 DotNetCompilerPlatform 是由 APS.NET 团队生产的,而且我没有使用 ASP.NET(但它似乎仍然可以工作)。( ref ) 我无法很好地概述这两者之间的区别,或者为什么后者甚至存在。

请注意,我对通过 CodeDom API 生成代码不感兴趣,我想编译在我的应用程序部署后创建的用户代码,并且该代码可能依赖于包。

我不只是尝试它的原因是我不知道如何加载 Microsoft.CodeAnalysis.Project。它没有构造函数,但可以从没有构造函数的解决方案中获得,而后者又可以从工作空间获得,工作空间有一个需要 HostServices 的构造函数,如果你有工作空间,可以通过工厂方法创建传递给它。

我仍然不确定 CodeAnalysis 是否适合从源代码编译或仅编译通过 CodeDom 生成的内容。

谢谢。