自从 Roslyn 面世已来,围绕.net的各种风声水起。到底它有何妙之处以至一石击起千层浪呢?首先咱们来来看它的主人微软是怎么说它的:“Compiler-as-a-Service”、”APIs”、“script”、“open source” 等等。
今天我要谈的是其中的一个小工具 CSI(Compiler Services Interactive) 的应用。这个小东东其实很好理解,就是C# Code AS Script ,即把命令行输入的内容当作C# 脚本进行动态编译处理。因为有这一个功能,苦逼的BUG工程师终于有福利了,因为使用CSI可以很方便的让我们对做程序进行调试工作了,bug的复现也就容易很多了。下面是几个用CSI当测试工具使常用的几个技巧:
1. Roslyn 在哪里?
NuGet里,你只需要引入:Microsoft.Net.Compilers、Microsoft.CodeAnalysis就可以使用它了
2. 怎么用Roslyn进行调试?
对于WinForm程序,一般躲在
package/Microsoft.Net.Compilers{version?}/tools目录下
对于Web程序,一般生成后,bin/roslyn目录下
3. 怎么用?
双击csi.exe即可开始使用
4. 怎么加载程序集?
#r "程序集名称,如果不在当前目录,则使用相对路径或完整路径"
#load "添加.cs文件或程序集"
一般情况下#r 用来加载程序集 #load 用来加载文件
5. 怎么调试?
这个没有技巧,你就把它当作写单元测试来。如:
#r "E:\datasource\ihu.doctor\lib\Common.dll"
using Sinldo.Common.Extensions;
using static System.Console;
public static string FindString(string value, string search, out int index, out string[] parts)
{
parts = value.DefaultNumberSplit();
index = 0;
foreach (var part in parts)
{
if (part == search)
{
return part;
}
index++;
}
return null;
}
string val = "123,456,789,012,456,798,5689,5678,568,782,458,962";
int index;
string[] parts;
string result = FindString(val, "568", out index, out parts);
WriteLine(string.Join(",", parts));
WriteLine($"index:{index},value:{result}");
6. 简易输出?
想要简单直接打印结果内容,由其是一些复杂的结构,你可以输入要打印的变量,后面不要带“;”即可。