首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够分析我们的源代码。之前我写过一些使用 Roslyn 进行语法分析的文章。...使用语法分析,可以轻松为代码编写提供各种错误报告以及修改代码(见这里)。而使用语义分析,你可以像在运行时使用反射一样,在编译时访问源代码中的各种类型、属性、方法等,特别适合用来分析引用、生成代码等。...如果你正在编写代码分析器(Analyzer)和修改器(CodeFix) 代码分析器和修改器的入口方法可以得到一个 SyntaxNodeAnalysisContext 类型的参数,这个参数里面就可以拿到...关于代码分析器(Analyzer)和修改器(CodeFix)可以参考我之前的这些博客: 可参考:基于 Roslyn 同时为 Visual Studio 插件和 NuGet 包开发 .NET/C# 源代码分析器...Analyzer 和修改器 CodeFixProvider - walterlv 可参考:使用基于 Roslyn 的 Microsoft.CodeAnalysis.PublicApiAnalyzers

    62620

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

    当获取到两个程序集时,如果要开始准备生成相关代码,可能会因为不知道两个程序集之间是否存在 InternalsVisibleTo 关系,也就是是否应该导出其 internal 的类型而困扰。...在能够获取到 IAssemblySymbol 类型的对象,即可通过 GivesAccessTo 方法判断两个程序集的 InternalsVisibleTo 关系 这个 GivesAccessTo 方法可以获取到当前的程序集对给定的程序集参数是否为...internal 可见 以下是详细的例子代码 本文的例子的任务是编写一个 Roslyn 分析器,在分析器里面使用 IIncrementalGenerator 增量 Source Generator 生成代码...\Analyzers\Analyzers.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" /> Roslyn 分析器 EnforceExtendedAnalyzerRules 属性的作用 以上的 LangVersion 属性设置为 latest 表示使用最新的语言版本,详细请参阅 VisualStudio

    27620

    .Net 编译器平台 --- Roslyn

    引言 最近做一个功能想要动态执行C#脚本,就是预先写好代码片段,在程序运行时去执行代码段,比如像这样(以下代码为伪代码): string scriptText = "int a = 1;int b =...ValueText 属性提供与 Value 属性相同的信息;但是,该属性的类型始终为 String。...种类(Kinds) 每个节点、标记或注释都有一个 RawKind 属性,类型为 System.Int32,用于标识表示的确切语法元素。...编译将每个声明的类型、成员或变量表示为符号。编译包含各种方法,可帮助您查找和关联在源代码中声明的符号或从程序集中作为元数据导入的符号。 与语法树类似,编译是不可变的。...Compilation 类型上的各种方法和属性帮助您查找符号。例如,您可以通过其常见的元数据名称查找已声明类型的符号。您还可以将整个符号表作为以全局命名空间为根的符号树进行访问。

    33930

    为go vet添加一个新的分析器,用于检查append后面的值缺失

    以下是 Go vet 的一些常见用途和功能: 错误检查:Go vet 可以检查代码中的语法错误、类型错误、未使用的变量和导入包、无法到达的代码等。...代码规范检查:Go vet 还可以检查代码是否符合 Go 语言的规范和最佳实践。它可以发现一些与代码风格和约定不符的地方,例如不必要的类型转换、不恰当的命名风格等。...在 Run 方法中,我们使用 ast.Inspect 函数遍历抽象语法树(AST),并检查每个函数调用是否为 append 函数调用。如果是,我们检查其参数列表的长度是否为 1。...它提供了一组标准的接口和工具,用于创建、注册和执行各种代码分析器。这些分析器可以用于检查代码中的错误、不良实践、性能问题等。...在检查完成后,使用info.ObjectOf函数获取标识符对应的对象,并通过类型断言判断该对象是否为types.Builtin类型(内建函数)。

    34340

    Microsoft.AspNet.Identity 自定义使用现有的表—登录实现

    Microsoft.AspNet.Identity是微软新引入的一种membership框架,也是微软Owin标准的一个实现。...的源代码实现对应的接口即可. 1.FindByNameAsync 先根据登录名找到user对象,使用UserManager中的UserStroe所实现IUserStore的接口方法 2.IsLockedOutAsync 检查登录是否锁定...实现 已有资源,假如我们已经有了数据库,有了user表,有了id字段guid类型,有了loginid代表登录的用户名,也就是源代码中的username 第一步 先实现我们自己的SignInManager...wxuser我继承了系统已经存在的user对象,然后强类型实现了IUser接口,因为我原系统对象已存在了username属性。而此处的wxuser.username属性是作为用户登录的账号意思存在的。...所以我强类型实现。

    1.8K20

    【SDL实践指南】Foritify结构化规则定义

    final关键字的java.util.loging.Logger对象的任何实例,Structural Analyzer会检查每个field构造对象的静态和最终属性,如果任一值为假,则字段满足规则的第一组条件...,Field构造对象满足第一个条件后,规则检查Field对象的声明类型,该字段必须是java.util.loging.Logger对象的实例或从该类继承的扩展,如果Field构造对象同时满足这两个条件,...Structural Analyzer会将字段声明报告为问题 B95EB686...*password.*" ]]> 上面的规则检查应用程序中每个注释构造对象的doc、inline和block属性,如果这些属性之一为真则注释满足以下条件...:它必须是块、内联或JavaDoc注释,然后该规则检查对象文本的文本属性以查看属性值的值是否与Java正则表达式"(?

    47620

    C# 9.0新特性介绍

    遗憾的是,C# 强制编写大量额外的代码来创建不可变的引用类型。Record为不可变的引用类型提供类型声明,该引用类型使用值语义实现相等性。...定义记录类型时,编译器会自动合成其他几种方法:Eques,GetHashCode,Copy,Clone,ToString等 记录支持继承。...方法签名取决于记录类型是否密封以及直接基类是否为对象。 记录应具有以下功能: 相等性是基于值的,包括检查类型是否匹配。 例如,即使两条记录的名称相同,Student 也不能等于 Person。...= 外,编译器还会合成新的 EqualityContract 属性。 该属性返回与记录类型匹配的 Type 对象。 如果基类型为 object,则属性为 virtual。...如果基类型是其他记录类型,则属性为 override。 如果记录类型为 sealed,则属性为 sealed。

    2K20

    推荐 .NETC# 开发者安装的几款代码分析插件或对应的代码分析 NuGet 包

    VS 扩展:Meziantou.Analyzer NuGet 包:Meziantou.Analyzer 类型 这里的分析器分为 Visual Studio 扩展形式的分析器和 NuGet 包形式的分析器...NuGet 包形式的分析器可以让某个项目中的所有成员享受到同样的代码分析提示(无论是否安装插件),但缺点是仅针对单个项目生效。...这款分析器也是微软主推的代码分析器,可以分析 API 设计问题、全球化与本地化问题、稳定性问题、性能问题、安全性问题、代码使用问题等非常多的种类。...NET Framework 开发桌面应用,那么此分析器会告诉你更恰当地使用框架提供的 API 如果你想安装这款 NuGet 包,并不需要特别去 NuGet 包管理器中安装,也不需要命令行,只需要去项目的属性页面...更值得推荐的一个原因是他为 Visual Studio 原本的很多报告了问题的代码提供了生成解决问题代码的能力。

    85530

    高性能动态编译库Natasha发布1.0版本!

    类型转换 : .NET中的类型转换不仅仅有指令级的转换,standard还提供了诸多方法支持不同类型之间的转换,因此你还需要花一些功夫去处理这些。...语法糖 : 一切语法糖在emit面前都要还原,比如可空类型语法糖,对象比较语法糖,类型比较语法糖等等,无疑会大大增加兼容工作的负担(core3.0的可空引用我还没有做测试)。...i); string MethodWidthParamsString(string str); string MethodWidthParams(int a,string str,int...NCaller是Natasha的实战项目,采用动态原生操作+动态优化查找算法,可以对动/静态类初始化以及字段和属性的常规操作,耗时仅为原生的2.5倍以下。...八、调试 由于核心编译引擎为Roslyn,因此语法检查、词法检查、语义检查等都支持,这样可以很好的为开发者提供错误提示, Natasha为此增加日志模块(NScriptLog), 在编译流程中

    50840

    【译】 WinForms:分析一下(我用 Visual Basic 写的)

    这只是开始 — 未来还有更多 借助 .NET 9,我们为 WinForms 专用分析器奠定了基础架构,并引入了第一组规则。这些分析器旨在解决安全性、稳定性和生产力等关键领域。...设计时数据嵌入到资源文件中,要么是因为缺少相关属性类型的必要 TypeConverters,要么是因为表单已本地化。 这两种情况都会对应用程序的完整性和安全性造成重大风险。...在设计(序列化)时调用此方法来确定是否应序列化属性的内容。 通过确保至少存在其中一种机制,您可以避免意外的序列化行为,并确保在设计时 CodeDOM 序列化过程中正确处理您的属性。...那么,显然,在那一刻,分析器启动了,您可能会看到类似这样的内容: 与之前讨论的 Async Analyzer 不同,此分析器附带了 Roslyn CodeFix。...还有一种更有效的方法来处理属性的必要编辑修改。您可能想问自己的问题是:如果根本没有应用任何属性来控制属性的某些方面,那么不仅要确保正确的序列化指导,还要应用其他设计时属性是否有意义?

    4200

    听GPT 讲Rust源代码--srctools(12)

    .invalid_derive_target函数首先遍历AST,查找所有类型定义的节点。对于每个类型定义,它会检查其是否包含任何派生属性。如果存在派生属性,则进一步检查该类型是否是有效的派生目标。...针对每个派生属性,程序会检查所涉及的宏是否合法,并检查它是否适用于所定义的类型。...Structs has这个Struct是一个简单的标记Struct,没有任何字段和方法,仅用于表示某种类型T是否具有特定的性质。 S这个Struct是一个包含一个字段的结构体,字段的类型为u32。...UndeclaredLabelHandler首先会检查给定的诊断(Diagnostic)是否是未声明标签错误。...然后,它会检查宏调用节点的属性,并根据宏的定义规则,检查宏调用是否符合规范。如果宏调用存在问题,处理器会生成一条错误或警告的诊断消息,并存储到 diag (diagnostics) 数据结构中。

    19810

    Swift 中的 Sendable 和 @Sendable 闭包

    标准库中的许多类型已经支持了Sendable协议,消除了对许多类型添加一致性的要求。由于标准库的支持,编译器可以为你的自定义类型创建隐式一致性。...例如,整型支持该协议: extension Int: Sendable {} 一旦我们创建了一个具有Int类型的单一属性的值类型结构体,我们就隐式地得到了对Sendable协议的支持。...然而,函数不能符合协议,所以Swift引入了@Sendable属性。你可以传递的函数的例子是全局函数声明、闭包和访问器,如getters和setters。...Targeted: 强制执行Sendable约束,并对你所有采用async/await等并发的代码进行actor-isolation检查。编译器还将检查明确采用Sendable的实例。...如果你正在使用这些框架的实例,你需要考虑实例是否真的是线程安全的。一旦你使用的框架被更新为Sendable的一致性,你可以删除@preconcurrency属性,并修复可能触发的警告。

    1.5K30
    领券