c# - 如何验证 C# 代码?

标签 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));

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

最佳答案

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

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

Roslyn CTP: Three Introductory Projects

关于c# - 如何验证 C# 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13729757/

相关文章:

c# - 如何在字符串中自动显示类的所有属性及其值?

c# - 将结构作为接口(interface)返回是如何工作的?

.net - SignalR .NET 客户端调用引发异常

.net - .net 4.0是否仍支持asmx

c# - 在继承链中重复代码契约要求?

c# - 从 View 中 ListBox 中删除的文件更新 ViewModel 中的 ObservableCollection - WPF

c# - 在 C# 中将 CSV 文件与数据库进行比较的最快方法

c# - 如何在声明中有条件地设置基类

c# - 如何将json对象反序列化为特定的子类?

asp.net-mvc - 在 .NET MVC 3 中使用 REST Web 服务