Получить версию пакета nuget, включенную в csproj in. Net Core 3.1 - PullRequest
0 голосов
/ 24 апреля 2020

Проще говоря, я хочу иметь возможность программно изменять файлы .csproj.

Я занимаюсь разработкой приложения, которое заменяет пакет nuget его фактической ссылкой на проект. Это приложение используется для целей отладки. У нас есть огромный набор пакетов, которые мы добавляем в наш файл решения. Для этого я читаю файл csproj и применяю регулярное выражение, чтобы найти указанную ссылку на пакет nuget, и вместо этого добавляю ссылку на проект. Эта часть работала, но больше не собирал пакеты.

Выше можно выполнить с помощью команды dotnet, но при этом я не могу заменить старую версию обратно.

Существует ли какой-либо пакет Microsoft Nuget, который может прочитать ссылки на пакеты в файлах csproj?

Аналогичный вопрос задается здесь , но Build.Engine недоступен в последних версиях. версия.

1 Ответ

0 голосов
/ 27 апреля 2020

Существует ли какой-либо пакет 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");


        }
    }
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...