C# 如何验证C代码?

C# 如何验证C代码?,c#,.net,.net-4.0,cil,C#,.net,.net 4.0,Cil,我正在开发一个WPF应用程序,用于验证文件中的C#代码 我能够得到这个文件,并根据不同的需要实例化它的类型 现在我需要的是根据我设置的一些标准验证代码。 我是什么意思 假设我有一个文件“Test.cs”,该文件有以下代码: using xpto; using abcd; public class Test { public static void Testing() { Iqueryable<XYZ> var1 = ctx.Where(c =>

我正在开发一个WPF应用程序,用于验证文件中的C#代码

我能够得到这个文件,并根据不同的需要实例化它的类型

现在我需要的是根据我设置的一些标准验证代码。 我是什么意思

假设我有一个文件“Test.cs”,该文件有以下代码:

using xpto;
using abcd;

public class Test
{
    public static void Testing()
    {
        Iqueryable<XYZ> var1 = ctx.Where(c => c.IdSomething == number);
        var1 = var1.Where(v => v.Count(x => x.ValZ) > 0);
    }
}
我想告诉您,该文件正在使用
Count(…)>0
而不是
Any()
。我知道这可以通过文本读取文件来实现,但我想知道是否可以使用反射或其他不需要硬编码的方式来实现。 这是我实例化该文件所做的工作(这是一个工作示例):


如果这个问题不清楚,请让我知道,这样我可以试着详细说明。

好吧,即使这个问题过于笼统,你们也可以用。将编译器作为一个可以使用的服务 从提供的代码中获取
AST
,并接收所需的所有必要信息

由于这是一个大问题,很难在这里给出一些简短的、不言自明的答案。更容易查看“如何运行东西”的具体示例,例如:


我刚刚看了一下语法分析文档。看起来这就是我需要的。我会花一些时间阅读这些信息,看看如何将其应用到我的范围内。谢谢你的回答。我试着下载来测试它,但它似乎只适用于VS2012,这是真的还是我搜索得不够?在所需的预装产品下(我有VS2010)@eestein:不,不,我实际上也在2010年使用过。Roslyn的旧版本在VS2010下工作,而当前的版本没有。@svick你知道我在哪里可以得到旧版本,还是已经弃用了?
var1 = var1.Where(v => v.Count(x => x.ValZ) > 0);
CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile.FullName);
Type instanceType = cr.CompiledAssembly.GetExportedTypes()
    .FirstOrDefault(e => e.Name.Equals(className));