使用 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() 像处理任何其他一次性类型一样处理它。完全有可能你用的古代版本也是一次性的,不过我真的不记得了。
我正在使用 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() 像处理任何其他一次性类型一样处理它。完全有可能你用的古代版本也是一次性的,不过我真的不记得了。