roslyn
文章平均质量分 94
walter lv
这个作者很懒,什么都没留下…
展开
-
Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码
Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够编译并执行我们的代码。作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目 —— 编译一个类,然后执行其中的一段代码。本文是 Roslyn 入门系列之一:Roslyn 入门:使用 Visual Studio 的语法可视化(Synta...原创 2018-06-02 09:22:56 · 6446 阅读 · 0 评论 -
使用 Roslyn 分析代码注释,给 TODO 类型的注释添加负责人、截止日期和 issue 链接跟踪
如果某天改了一点代码但是没有完成,我们可能会在注释里面加上 // TODO。如果某个版本为了控制影响范围临时使用不太合适的方法解了 Bug,我们可能也会在注释里面加上 // TODO。但是,对于团队项目来说,一个人写的 TODO 可能过了一段时间就淹没在大量的 TODO 堆里面了。如果能够强制要求所有的 TODO 被跟踪,那么代码里面就比较容易能够控制住 TODO 的影响了。本文将基于 Rosl...原创 2019-09-27 09:23:34 · 636 阅读 · 0 评论 -
基于 Roslyn 同时为 Visual Studio 插件和 NuGet 包开发 .NET/C# 源代码分析器 Analyzer 和修改器 CodeFixProvider
Roslyn 是 .NET 平台下十分强大的编译器,其提供的 API 也非常丰富好用。本文将基于 Roslyn 开发一个 C# 代码分析器,你不止可以将分析器作为 Visual Studio 代码分析和重构插件发布,还可以作为 NuGet 包发布。不管哪一种,都可以让我们编写的 C# 代码分析器工作起来并真正起到代码建议和重构的作用。本文将教大家如何从零开始开发一个基于 Roslyn 的 C#...原创 2019-09-27 08:43:36 · 1294 阅读 · 0 评论 -
Roslyn/MSBuild 在编译期间处理路径中的斜杠与反斜杠
本文介绍如何在项目文件 csproj,或者 MSBuild 的其他文件(props、targets)中处理路径中的斜杠与反斜杠。本文内容路径中的斜杠与反斜杠判断路径末尾是否有斜杠或反斜杠确保路径末尾有斜杠或反斜杠确保路径末尾没有斜杠或反斜杠路径中的斜杠与反斜杠我们都知道文件路径的层级之间使用斜杠(/)或者反斜杠(\)来分隔,具体使用哪一个取决于操作系统。本文不打算对具体使用哪一种特别说明,...原创 2019-06-29 10:03:42 · 824 阅读 · 0 评论 -
在 Roslyn/MSBuild 中进行基本的数学运算
在任何一种编程语言中,做基本的数学运算都是非常容易的事情。不过,不知道 .NET 项目的项目文件 csproj 文件中进行数学运算就不像一般的编程语言那样直观了,毕竟这不是一门语言,而只是一种项目文件格式而已。本文介绍如何在 Roslyn/MSBuild 的项目文件中使用基本的数学运算。本文内容Roslyn/MSBuild 中的数学运算加减乘除模不要试图在 MSBuild 中使用传统的数学运...原创 2019-06-29 10:02:46 · 332 阅读 · 0 评论 -
在 Roslyn 分析语法树时添加条件编译符号的支持
我们在代码中会写 #if DEBUG 或者 [Conditional("DEBUG")] 来使用已经定义好的条件编译符号。而定义条件编译符号可以在代码中使用 #define WALTERLV 来实现,也可以通过在项目属性中设置条件编译符号(Conditional Compilation Symbols)来实现。然而如果我们没有做任何特殊处理,那么使用 Roslyn 分析使用了条件编译符号的源码时...原创 2019-01-01 11:01:04 · 716 阅读 · 0 评论 -
Visual Studio 2017 以前的旧格式的 csproj Import 进来的 targets 文件有时不能正确计算属性(PropertyGroup)和集合(ItemGroup)
我在之前的博客中有教大家如何编写 NuGet 工具包,其中就有编写 .targets 文件。我在实际的使用中,发现 Visual Studio 2017 带来的含 Sdk 的新 csproj 格式基本上没有多少坑;然而旧的 csproj 文件却总是不能完美的运行,总是出错。关键是,不是每台电脑都出错,不是每个时机都出错。本文将讲一些坑。本文内容本文的前置知识问题原因解决办法衍生知识本文的...原创 2018-12-23 15:16:54 · 1328 阅读 · 0 评论 -
预编译框架,开发高性能应用 - 课程 - 微软技术暨生态大会 2018
微软技术暨生态大会(Tech Summit),2018 年在上海世博中心召开。这是最后一次的 Tech Summit 了;明年开始,中国大陆地区就要和其他国家和地区一样,进行全球 Ignite Tour 了。我也有幸成为分会场讲师团队的一员,课程是《预编译框架 - 开发高性能应用》。内容就是我博客中与 MSBuild / Roslyn / dotnet / NuGet 相关的内容;我们将利用这些...原创 2018-10-15 08:45:47 · 855 阅读 · 0 评论 -
都是用 DllImport?有没有考虑过自己写一个 extern 方法?
你做 .NET 开发的时候,一定用过 DllImport 这个特性吧,这货是用于 P/Invoke (Platform Invoke, 平台调用) 的。这种 DllImport 标记的方法都带有一个 extern 关键字。那么有没有可能我们自己写一个自己的 extern 方法呢?答案是可以的。本文就写一个这样的例子。DllImport日常我们的平台调用代码是这样的:...原创 2018-09-09 10:10:07 · 1358 阅读 · 0 评论 -
理解 Roslyn 中的红绿树(Red-Green Trees)
Roslyn 的 API 是非常易用的。即便如此复杂的 C# 语法,建立的复杂的 C# 语法树,还有其复杂的树遍历和修改过程,也都被其 API 包装得干净简洁。而这背后是它的重要设计思路 —— 红绿树。红绿树的影子如果你是通过搜索找到这篇文章的,那么至少证明你调试过 Roslyn API 的使用,或者阅读过 Roslyn 的源码。因为正常使用 Roslyn 的 API 时你...原创 2018-07-19 20:09:36 · 3804 阅读 · 6 评论 -
Roslyn 语法树中的各种语法节点及每个节点的含义
使用 Roslyn 进行源码分析时,我们会对很多不同种类的语法节点进行分析。如果能够一次性了解到各种不同种类的语法节点,并明白其含义和结构,那么在源码分析的过程中将会更加得心应手。本文将介绍 Roslyn 中各种不同的语法节点、每个节点的含义,以及这些节点之间的关系和语法树结构。基本概念using System;namespace Walterlv.Demo{ ...原创 2018-07-19 20:03:56 · 2991 阅读 · 2 评论 -
使用基于 Roslyn 的 Microsoft.CodeAnalysis.PublicApiAnalyzers 来追踪项目的 API 改动,帮助保持库的 API 兼容性
做库的时候,需要一定程度上保持 API 的兼容性本文内容第一步:安装 NuGet 包第二步:创建 API 记录文件第三步:添加 API 记录体验 API 的追踪将警告变成错误第四步:将 API 打包第一步:安装 NuGet 包首先打开你的库项目,或者如果你希望从零开始也可以直接新建一个项目。这里为了博客阅读的简单,我创建一个全新的项目来演示。然后,为主要的库项目安装 NuGet 包:...原创 2019-09-27 09:35:25 · 807 阅读 · 0 评论