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

在编译C#项目时确定所需的程序集,c#,roslyn-code-analysis,microsoft.codeanalysis,C#,Roslyn Code Analysis,Microsoft.codeanalysis,我正在为C#项目编写元数据提取器。我没有使用MSBuildWorkspace,而是使用CSharpSyntaxTree.ParseText()和CSharpCompilation.Create() 检查编译中的诊断时,我注意到我缺少许多程序集引用: _references.Add( MetadataReference.CreateFromFile( Assembly.Load( "netstandard, Version=2.0.0.0" ).Location ) ); _references.

我正在为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 ) );
其中,
\u references
是我在编译中使用的集合:

compilation = CSharpCompilation.Create( ProjectDocument.AssemblyName )
    .AddReferences( _references.ToArray() )
    .AddSyntaxTrees( trees );
是我正在编译的语法树


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

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

在您的项目上运行NuGet还原是否可行?如果是,那么听起来像是
project.assets.json
文件可能有您所需要的!Thanx,@rbennett485;当我出于其他原因解析该文件时,我应该自己想到这一点。如果你提出你的想法作为回答,我很乐意接受。@rbennett485我可以向你推荐吗?这是一个相关的问题,我希望你们能有所了解。