0

我正在为 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 包执行此操作。但我不知道如何为其他参考做到这一点。

4

1 回答 1

1

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

于 2020-02-28T09:56:42.340 回答