编译 C# 项目时确定所需的程序集

Determine Needed Assemblies When Compiling C# Project

我正在为 C# 项目编写元数据提取器。我没有使用 MSBuildWorkspace,而是使用 CSharpSyntaxTree.ParseText() 和 CSharpCompilation.Create().

检查编译中的诊断,我发现我缺少一些程序集引用:

_references.Add( MetadataReference.CreateFromFile( Assembly.Load( "netstandard, Version=2.0.0.0" ).Location ) );
_references.Add( MetadataReference.CreateFromFile( Assembly.Load( "System.Runtime" ).Location ) );
_references.Add( MetadataReference.CreateFromFile( typeof( object ).Assembly.Location ) );
_references.Add( MetadataReference.CreateFromFile( Assembly.Load( "System.IO.FileSystem" ).Location ) );
_references.Add( MetadataReference.CreateFromFile( Assembly.Load( "System.Runtime.Extensions" ).Location ) );
_references.Add( MetadataReference.CreateFromFile( Assembly.Load( "System.Collections" ).Location ) );
_references.Add( MetadataReference.CreateFromFile( Assembly.Load( "System.Private.Uri" ).Location ) );

其中_references是我在编译中使用的集合:

compilation = CSharpCompilation.Create( ProjectDocument.AssemblyName )
    .AddReferences( _references.ToArray() )
    .AddSyntaxTrees( trees );

trees是我正在编译的语法树。

我的问题是:有没有办法从语法树或 .csproj 文件中确定需要哪些引用?我通过解析各种 <ProjectReference> 节点来为添加到项目文件的 nuget 包执行此操作。但我不确定如何为其他参考文献做到这一点。

如果您可以 运行 NuGet 恢复,那么 project.assets.json 文件应该包含您需要的所有信息