使用 Nuget.Packages 从 csproj 读取 Nuget 包
Read Nuget Packages from csproj with Nuget.Packages
我有一个控制台应用程序可以扫描重复的或过时的 nuget 包。当包裹位于 packages.config 时,我可以使用此代码
var packageReferences = new PackagesConfigReader(
new FileStream(path, FileMode.Open, FileAccess.Read))
.GetPackages();
return packageReferences;
阅读它们并取回 IEnumerabla。我试图让它与 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; }
}
我有一个控制台应用程序可以扫描重复的或过时的 nuget 包。当包裹位于 packages.config 时,我可以使用此代码
var packageReferences = new PackagesConfigReader(
new FileStream(path, FileMode.Open, FileAccess.Read))
.GetPackages();
return packageReferences;
阅读它们并取回 IEnumerabla。我试图让它与 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; }
}