【发布时间】:2020-02-24 23:18:20
【问题描述】:
我正在为 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文件可能有你需要的东西 -
哈哈!谢谢,@ rbennett485;当我出于其他原因解析该文件时,我自己应该想到这一点。如果您提供您的想法作为答案,我很乐意接受它。
-
@rbennett485 我可以推荐你给stackoverflow.com/questions/60404294/…吗?这是一个相关的问题,希望您能对此有所了解。
-
????恐怕我不确定你的其他问题
标签: c# roslyn-code-analysis microsoft.codeanalysis