Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Nuget.Packages从csproj读取Nuget包_C#_Nuget_Nuget Package - Fatal编程技术网

C# 使用Nuget.Packages从csproj读取Nuget包

C# 使用Nuget.Packages从csproj读取Nuget包,c#,nuget,nuget-package,C#,Nuget,Nuget Package,我有一个控制台应用程序,可以扫描重复或过期的nuget软件包。当包位于packages.config中时,我可以使用此代码 var packageReferences = new PackagesConfigReader( new FileStream(path, FileMode.Open, FileAccess.Read)) .GetPackages(); return packageReferences;

我有一个控制台应用程序,可以扫描重复或过期的nuget软件包。当包位于packages.config中时,我可以使用此代码

var packageReferences = new PackagesConfigReader(
                    new FileStream(path, FileMode.Open, FileAccess.Read))
                    .GetPackages();
 return packageReferences;
读一下,然后回到伊努梅拉布拉。我试图让它与CSPROJ文件一起工作,但是上面的内容不再有效,而且我似乎找不到任何关于如何读取它的文档(除了手动加载XML)


有没有办法让它与CSPROJ文件一起工作?

我建议解析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; }
}
void Main()
{
var xml=@”
网络47
Exe
真的
真的
";
var doc=XDocument.Parse(xml);
var packageReferences=doc.XPathSelectElements(//PackageReference)
.选择(pr=>new PackageReference
{
Include=pr.Attribute(“Include”).Value,
版本=新版本(pr.Attribute(“Version”).Value)
});
WriteLine($”项目文件包含{packageReferences.Count()}包引用:”;
foreach(packageReferences中的var packageReference)
{
WriteLine($“{packageReference.Include},版本{packageReference.version}”);
}
//输出:
//项目文件包含3个包引用:
//Microsoft.AspNetCore,版本2.1.2
//Microsoft.AspNetCore.Authentication.Cookies,版本2.1.1
//Microsoft.AspNetCore.Authentication.JwtBearer,版本2.1.1
}
公共类包引用
{
公共字符串包括{get;set;}
公共版本版本{get;set;}
}

谢谢Dan,我希望有其他方法,但这是正确的答案