使用 Roslyn 加载多个项目

Using Roslyn to load several projects

我正在使用 Roslyn 通过使用以下代码显示引用给定程序集的 C# 项目:

private static void ProcessProject(string projectName, string referenceName)
    {
        try
        {

            IWorkspace workspace = Workspace.LoadStandAloneProject(projectName);
            ISolution solution = workspace.CurrentSolution;

            string upper = referenceName.ToUpper();

            foreach (IProject project in solution.Projects)
            {
                IEnumerable<MetadataReference> metadataReferences = project.MetadataReferences;
                foreach (MetadataReference metadataReference in metadataReferences)
                {
                    if (metadataReference.Display.ToUpper().Contains(upper))
                    {
                        Console.WriteLine(project.Name);
                    }
                }
            }
        }
        catch (Exception e)
        {
            Console.Error.WriteLine(e);
        }
    }

问题是内存在增长(因为我有数百个项目要分析)并且最终出现内存不足异常。 知道如何卸载 workspace/solution/project 以释放已用内存吗?

由于您使用的是 IWorkspace,这让我相信您使用的是非常、非常 的 Roslyn 旧版本。确保您使用的是 NuGet 中的 current version,因为从那时起我们更改了 lot。并修复了这么多错误。

在当前的 API 中,我们摆脱了接口,Workspace 实现了 IDisposable,因此您可以通过调用 Dispose() 像处理任何其他一次性类型一样处理它。完全有可能你用的古代版本也是一次性的,不过我真的不记得了。