Читайте пакеты Nuget из csproj с помощью Nuget.Packages - PullRequest
0 голосов
/ 12 октября 2018

У меня есть консольное приложение, которое сканирует дубликаты или устаревшие пакеты nuget.Когда пакеты были расположены в packages.config, я мог использовать этот код

var packageReferences = new PackagesConfigReader(
                    new FileStream(path, FileMode.Open, FileAccess.Read))
                    .GetPackages();
 return packageReferences;

, чтобы прочитать их и вернуть IEnumerabla.Я пытаюсь заставить его работать с файлами CSPROJ, но вышеупомянутое больше не работает, и я не могу найти какую-либо документацию о том, как его прочитать (кроме ручной загрузки XML).

Есть ли способ заставить его работать с файлами CSPROJ?

1 Ответ

0 голосов
/ 12 октября 2018

Я предлагаю разобрать XML.Я создал это за две минуты.

void Main()
{
    var xml = @"<Project Sdk=""Microsoft.NET.Sdk.Web"">
      <PropertyGroup>
        <TargetFramework>net47</TargetFramework>
        <OutputType>Exe</OutputType>
        <GenerateAssemblyTitleAttribute>true</GenerateAssemblyTitleAttribute>
        <GenerateAssemblyDescriptionAttribute>true</GenerateAssemblyDescriptionAttribute>
      </PropertyGroup>
      <ItemGroup>
        <PackageReference Include=""Microsoft.AspNetCore"" Version=""2.1.2"" />
        <PackageReference Include=""Microsoft.AspNetCore.Authentication.Cookies"" Version=""2.1.1"" />
        <PackageReference Include=""Microsoft.AspNetCore.Authentication.JwtBearer"" Version=""2.1.1"" />
      </ItemGroup>
    </Project>";

    var doc = XDocument.Parse(xml);
    var packageReferences = doc.XPathSelectElements("//PackageReference")
        .Select(pr => new PackageReference
        {
            Include = pr.Attribute("Include").Value,
            Version = new Version(pr.Attribute("Version").Value)
        });

    Console.WriteLine($"Project file contains {packageReferences.Count()} package references:");
    foreach (var packageReference in packageReferences)
    {
        Console.WriteLine($"{packageReference.Include}, version {packageReference.Version}");
    }

    // Output:
    // Project file contains 3 package references:
    // Microsoft.AspNetCore, version 2.1.2
    // Microsoft.AspNetCore.Authentication.Cookies, version 2.1.1
    // Microsoft.AspNetCore.Authentication.JwtBearer, version 2.1.1
}

public class PackageReference
{
    public string Include { get; set; }
    public Version Version { get; set; }
}
...