Определение необходимых сборок при компиляции проекта 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>. Но я не уверен, как это сделать для других ссылок.


person Mark Olbert    schedule 24.02.2020    source источник
comment
Возможно ли запустить восстановление NuGet в вашем проекте? Если это так, то похоже, что файл project.assets.json может иметь то, что вам нужно.   -  person rbennett485    schedule 25.02.2020
comment
РЖУ НЕ МОГУ! Спасибо, @rbennett485; Я должен был подумать об этом сам, когда анализирую этот файл по другим причинам. Если вы предложите свою идею в качестве ответа, я буду рад принять ее как таковую.   -  person Mark Olbert    schedule 25.02.2020
comment
@rbennett485 могу я отослать вас к stackoverflow.com/questions/ 60404294/? Это связанный с этим вопрос, и я надеюсь, что у вас есть некоторые идеи.   -  person Mark Olbert    schedule 26.02.2020
comment
???? Боюсь, не уверен в вашем другом вопросе   -  person rbennett485    schedule 28.02.2020


Ответы (1)


Если вы можете запустить восстановление NuGet, в файле project.assets.json должна быть вся необходимая информация.

person rbennett485    schedule 28.02.2020