从C#源代码中获取所有方法

时间:2017-09-19 02:13:47

标签: c# reflection codedom

我期待使用以下代码获取C#中使用的所有方法名称:

CompilerParameters parameters = new CompilerParameters()
{
    GenerateExecutable = false,
    GenerateInMemory = true
};

var provider = new CSharpCodeProvider();
foreach (string path_file in files)
{
    string source = File.ReadAllText(path_file);
    Console.Out.WriteLine(source);
    CompilerResults results = provider.CompileAssemblyFromSource(parameters, source);

    if (results.Errors.HasErrors)
    {
        foreach (var error in results.Errors)
            Console.Out.WriteLine(error.ToString());
        return;
    }
}

我正在尝试在变量源中读取源代码并在CompileAssemblyFromSource类的CSharpCodeProvider方法中传递它。

我在结果变量下遇到以下错误。

  

c:\ Users \ username \ AppData \ Local \ Temp \ 2rdqotiv.0.cs(3,14):错误CS0234:名称空间'System'中不存在类型或命名空间名称'Linq'(是你吗?缺少程序集引用?)。

任何人都可以帮我解决这个错误吗?我正在使用MVS 15。

1 个答案:

答案 0 :(得分:0)

您必须添加引用的程序集,例如:

parameters.ReferencedAssemblies.Add(typeof(Enumerable).Assembly.Location);

您也可以手动添加组件,如下所示:

string exDir = $@"C:\WINDOWS\Microsoft.NET\Framework\v{ver}";
parameters.CompilerOptions = $"/lib:{exDir}";

顺便说一句,您也可以使用CompileAssemblyFromFile而不必手动打开文件。