Определите необходимые сборки при компиляции проекта C# - PullRequest
0 голосов
/ 25 февраля 2020

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

1 Ответ

1 голос
/ 28 февраля 2020

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

...