Я пишу экстрактор метаданных для 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, какие именно ссылки необходимы? Я делаю это для пакетов nuget, добавленных в файл проекта, путем анализа различных узлов <ProjectReference>
. Но я не уверен, как это сделать для других ссылок.