Существует ли какой-либо пакет Microsoft Nuget, который может прочитать ссылки на пакеты в файлах csproj?
Насколько я знаю , Microsoft.Build .Engine не поддерживает редактирование новых проектов в формате SDK (Net Core ) и не совместим с этим пакетом nuget. Этот пакет nuget предназначен только для старых проектов в формате SDK (Net Framework ), и вы не можете редактировать xml элементов Net Core Projects.
Получить версию пакета nuget, включенную в csproj in. Net Core 3.1
Поскольку вы хотите получить ссылки на пакет Nuget и их версии, вы можете попробовать эту функцию программно:
public class PackageReference
{
public string Include { get; set; } //get the nuget reference name
public Version Version { get; set; } // get thee nuget package version
}
static void Main(string[] args)
{
//load the xxx.csproj file
var doc = XDocument.Load("C:\\xxxx\\xxxx\\xxx\\xxx\\xxx.csproj");
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}");
}
}
Обновление 1
Просто установите Microsoft.Build и Microsoft.Build.Utilities.Core в net Framework Framework, а затем введите их, которые могут установить свойство в xxx.csproj
файле, как это сделал Build.Engine
пакет nuget.
Обратите внимание , что оно должно быть записано в net Framework проекты, а не net базовые или net стандартные проекты (что приведет к ошибкам).
using Microsoft.Build.Evaluation;
.......
{
class Program
{
static void Main(string[] args)
{
var collection = new ProjectCollection();
var project = collection.LoadProject(@"xx:\xxx\xxx\xxx.csproj");
project.SetProperty("Test","true");
project.Save(@"xx:\xxx\xxx\xxx.csproj");
}
}
}
Надеюсь, это поможет вам.