上一篇我们讲了如何建立一个简单的Roslyn分析项目如分析检查我们的代码. 今天我们主要介绍各个项目中具体的作用以及可视化分析工具. 还是这种截图,可以看到解决方案下一共有三个项目. Analyzer1 : 这是比较核心的模块,主要包括两块内容,代码问题的诊断(diagnostics )和代码问题的修复(fix),该项目编译后会生成一个analyzer DLL文件.当然,同时也会生成一个NuGet package. Analyzer1.Vsix: 这是一个扩展插件,会把第一个项目生成的analy…
OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们通常为理解一个 warning ,鼠标移上去: 提示“声明了该字段但没有使用过” 当然,这对项目代码编译没有什么影响.不过,我想了一下,如果我们可以重写IDE的编译器,把我们的一些规则写进去,对于团队 的代码review其实是很高效的一件事情.我们通常的代码review会有滞后,都是通过提交PR或代…
目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下. 一.实现原理 Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志. MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种…
假如需要实现一个代码编辑器,其中一个很重要的功能是实现代码提示,类似VS的代码智能提示.下面用Roslyn编译器来实现一个简单的代码提示功能. 代码提示,首先必须需要知道对象的类型信息,然后通过迭代获取成员. static void Main(string[] args) { var code = @" using System; public class _RoslynCodeCompletionSample { public void MyMethod() { var datetime =…
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业不是百度来的,我只是百度了一些示例代码的意思,怎么用!算了,越解释万一越黑呢!哈哈O(∩_∩)O哈哈~) ----------------------------------------------------------------分界线------------------------------…
先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了,如何让异步事件队列中一直有事件呢?一个简单的办法就是循环发起异步读操作,如果对方一直都不发数据过来,则这个异步读事件就会一直在异步事件队列中,这样io_service::run就不会退出了.但是这样有一个缺点就是io_service::run处于阻塞会阻塞当前线程,如果不希望阻塞当前线程,就还是通过…
今天写一个简单的倒计时函数 代码如下: #include<stdio.h> #include<windows.h> int main() { int i; printf("倒计时\n"); ;i >= ;i--) { printf("%5d\b\b\b\b\b", i); Sleep(); } printf("\n"); }…
下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么写: e)   tuidong()函数:判断移动人物的前方的情况 1)   第一部分: 1 int count,caw=0;//行和列 2 int i,j,tui; 3 for(i=0;i<9;i++) 4 { 5 for (j=0;j<11;j++) 6 { 7 if(map[i][j]==2|…
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简单demo.开发IDE用的是JB Golang. 整个项目的文件结构如下: PoWdemo │ main.go │ ├─Block │ block.go │ └─BlockChain blockChain.go 首先是block.go文件,这个文件记录了有关区块的结构体以及对应的操作函数,详细代码如下: package Block import ( "crypto/sha256&quo…
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hellomake #Magnum, 2014-10-20 # 指令编译器和选项 CC=gcc CFLAGS=-Wall # 需要链接库的库名,比如libm.a,就是-lm,需要去掉前面的lib和后面的.a LIBS=-lm # 设置默认搜索头文件的路径,优先是这个,然后是系统路径 IncludeDir…