先读取 sln 项目里的文件,csorpj,在读取cs等文件,创建输出文件夹 会生成一个类似集合对象,里面有你的代码文件,然后遍历集合,找出代码文件 如 xx.cs文件,然后读取 cs 文件里的代码 ,还有一些roslyn 读取 语法根,获取语义模型异步,获取文档范围 rangs 部分该不太确定具体意义 根据 cs文件名称创建 html文件, 然后通过 StreamWriter( html文件地址) 写入数据待文件 然后读取rangs 中的 text, 理解文本所在的位置,读取这个位置的文本[0-20] 为 // <auto-generated/> 有实现则会生成链接连接到实现处,没有则展示 检查这个文本有没有实现 1 有实现(例如 A a=new() 自定义对象) 会先获取 当前 rangs 里 获取 token,然后 rang,token 去获取 GetSymbol 获取 符号们就是有没有实现(此处系统的如system.write() 等 要有 网上的程序集集合才能获取到) 然后 判断 程序集 ISymbol 的种类 var typeSymbol = symbol as ITypeSymbol; string symbolId = SymbolIdService.GetId(symbol); var location = symbol.Locations[0]; string destinationAssemblyName = null; if (location.IsInSource) { //生成有元数据的链接 result = GenerateHyperlink(symbol, symbolId, location.SourceTree, out destinationAssemblyName); } 然后 生成链接 链接主要有 程序cs名称,加上 ISymbol 生成的 的id (由程序名称的 MD5 获取 hash 在转化字符 ) 链接例子: A.cs.html#666fbff426dc92fc return new HtmlElementInfo { Name = "a", Attributes = { { "href", href }, } }; 2 没实现 (public class a) 则通过 stringbuild 拼接文本 生成html代码 <span class="comment">// <auto-generated/></span> 然后写入 在读取 项目里的所有cs文件并创建对应html, 遍历读取cs文件,有些类,方法 有实现的添加链接并写入
标签:文件,读取,细化,获取,html,cs,源码,SourceBrowser,链接 From: https://www.cnblogs.com/liujian1368928/p/17914983.html