如何验证C#代码?

时间:2012-12-05 18:16:06

标签: 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 => c.IdSomething == number);
        var1 = var1.Where(v => v.Count(x => x.ValZ) > 0);
    }
}

在我的应用程序中,我将实例化此文件(已经完成),然后根据某些规则对其进行验证。例如,在这一行:

var1 = var1.Where(v => v.Count(x => x.ValZ) > 0);

我想告诉该文件正在使用Count(...) > 0而不是Any()。我知道可以通过文本读取文件来完成,但我想知道是否可以使用反射,或任何其他不需要这种硬编码的方式。 这是我实例化文件(这是一个工作示例):

CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile.FullName);
Type instanceType = cr.CompiledAssembly.GetExportedTypes()
    .FirstOrDefault(e => e.Name.Equals(className));

如果不清楚,请告诉我,我可以尝试详细说明。

1 个答案:

答案 0 :(得分:6)

好吧,即使问题过于笼统,你也可以使用Microsoft Roslyn来完成。您可以使用编译器作为服务 从提供的代码中获取AST并收到您需要的所有必要信息。

由于这是很重要的事情,所以很难在这里提出一些简短而自我解释的答案。更容易看一下“如何运行东西”的具体示例,例如:

Roslyn CTP: Three Introductory Projects