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

Get all methods from C# source code

我期待使用以下代码获取 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;
    }
}

我正在尝试读取可变源中的源代码并将其传递到 CSharpCodeProvider class 的 CompileAssemblyFromSource 方法中。

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

c:\Users\username\AppData\Local\Temprdqotiv.0.cs(3,14) : error CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?).

谁能帮我解决这个错误?我正在使用 MVS 15。

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

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

也可以手动添加程序集,如下:

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

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