Как получить ссылочные пакеты nuget, используя MSBuildWorkspace? - PullRequest
2 голосов
/ 05 октября 2019

Я использую MSBuildWorkspace для загрузки решения для анализа с использованием OpenSolutionAsync, а затем выполняю итерации для проектов. Я не вижу никакой информации о пакетах nuget, на которые ссылается проект. MetadataReferences есть, но это список DLL без явной версии библиотеки - он находится где-то в пути, но чтобы извлечь это, мне придется извлечь его из текста. Также иногда этот список пуст, потому что некоторые ошибки при загрузке проекта.

Есть ли способ получить простой список имен и версий библиотеки, на которую есть ссылки?

1 Ответ

1 голос
/ 03 ноября 2019

В соответствии с обсуждением этого вопроса , MSBuildWorkspace не имеет никакой возможности получить ссылки NuGet на проект. Однако вы можете проанализировать файл .csproj, если вы используете проект sdk format или packages.config в противном случае.

Для проекта sdk вы можете использовать следующий код:

void NugetPackages(Microsoft.CodeAnalysis.Project project)
{
    var csproj = new XmlDocument();
    csproj.Load(project.FilePath);
    var nodes = csproj.SelectNodes("//PackageReference[@Include and @Version]");
    foreach (XmlNode packageReference in nodes)
    {
        var packageName = packageReference.Attributes["Include"].Value;
        var packageVersion = Version.Parse(packageReference.Attributes["Version"].Value);
        // handle package
    }
}

Для старого формата .csproj выможет использовать следующий код:

void NugetPackages(Microsoft.CodeAnalysis.Project project)
{
    var directory = Path.GetDirectoryName(project.FilePath);
    var packagesConfigPath = Path.Combine(directory, "packages.config");
    var packagesConfig = new XmlDocument();
    packagesConfig.Load(packagesConfigPath);
    var nodes = packagesConfig.SelectNodes("//package[@id and @version]");
    foreach (XmlNode packageReference in nodes)
    {
        var packageName = packageReference.Attributes["id"].Value;
        var packageVersion = Version.Parse(packageReference.Attributes["version"].Value);
        // handle package
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...