问题标签 [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.
roslyn - Roslyn:从 CFG 中的 BasicBlocks 重构代码
在 Roslyn 中,控制流图具有构成程序的BasicBlock列表。是否可以从每个块中获取代码语句来重构整个代码?
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
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
有两个静态方法可以通过传递文件或字节来获取实例,但我不知道如何使用它来实现我的目标......
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,所以它显然不存在。
这是我试图编译和使用运行时的代码(简化):
}
.net - 为什么在 .NET4.6 中很少有分析器规则将其有效严重性设置为抑制
添加代码质量 NuGet 包后,我可以看到默认情况下,某些规则的有效严重性级别设置为抑制。但它们的默认严重性级别仍然是警告。
如何将所有规则的严重性设置为警告?
我尝试在 .csproj 文件中使用 AllEnabledByDefault。但它不起作用。
有什么帮助吗?
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 代码分析?
asp.net-web-api - 我可以在 ASP.NET Web API 控制器中重新引发异常吗?
我有以下控制器代码:
代码分析器抱怨它并给出以下警告消息:
警告 CA1031
修改“获取”以捕获更具体的允许异常类型,或重新引发异常
看来这个控制器的目的是返回异常而不是重新抛出。我可以用投掷代替这个回报吗?如果我只想重新扔它,那么也许我什至不需要一开始就抓住它。
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 中显示此配置:
有人可以帮忙吗?
c# - C# Microsoft.CodeAnalysis 中的 System.IntPtr 和 nint
在类型的正常比较中
typeof(nint)==typeof(System.IntPtr)
是真的
所以我期待SpecialType
ofSystem.IntPtr
就像andnint
一样,在使用 进行 CodeAnalysis 时。System.Int32
int
Microsoft.CodeAnalysis
但事实证明 System.IntPtr 的 SpecialType 仍然是 System.IntPtr。
这是我的代码
所以我的问题是为什么特殊类型System.IntPtr
不在nint
CodeAnalysis 中?
PS。我已经浏览了这个文档。我知道“..关键字不仅仅是类型的别名。” 但为什么这是真的typeof(nint)==typeof(System.IntPtr)
呢?
roslyn - Project.GetCompilationAsync() 与 CSharpCodeProvider.CompileAssemblyFromSource() 用于在运行时使用 Roslyn 编译源代码
我继承了一个使用 Microsoft.CSharp.CSharpCodeProvider 的项目,该项目现已成为旧版,因此我已切换到新的 Roslyn 版本 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,如下所述:
现在我想为我正在编译的项目添加使用 NuGet 包的功能,最好是在 SDK 样式的 .csproj 文件中使用较新的包引用格式。
我的问题是使用 Microsoft.CodeAnalysis 会更好吗?Project.GetCompilationAsync比 CSharpCodeProvider.CompileAssemblyFromSource(),如果是这样怎么办?我说得更好,因为它看起来像 DotNetCompilerPlatform 是由 APS.NET 团队生产的,而且我没有使用 ASP.NET(但它似乎仍然可以工作)。( ref ) 我无法很好地概述这两者之间的区别,或者为什么后者甚至存在。
请注意,我对通过 CodeDom API 生成代码不感兴趣,我想编译在我的应用程序部署后创建的用户代码,并且该代码可能依赖于包。
我不只是尝试它的原因是我不知道如何加载 Microsoft.CodeAnalysis.Project。它没有构造函数,但可以从没有构造函数的解决方案中获得,而后者又可以从工作空间获得,工作空间有一个需要 HostServices 的构造函数,如果你有工作空间,可以通过工厂方法创建传递给它。
我仍然不确定 CodeAnalysis 是否适合从源代码编译或仅编译通过 CodeDom 生成的内容。
谢谢。