Программно с восстановлением кода C# PackageReferences

Я пытаюсь программно с помощью базового кода C# восстановить packageReference для проектов .NET framework и .NET core.

Я думал об использовании dotnet.exe/msbuild.exe, но не знаю как!

Я хочу смоделировать, что мы можем сделать с помощью dotnet CLI:

dotnet restore '.\myproject.csproj' --packages '.\OutputFolder' 

но я хочу сделать это программно.

Спасибо за ответы.


person Tester User    schedule 20.08.2019    source источник
comment
Почему бы не использовать оболочку и не запустить dotnet cli?   -  person EliSherer    schedule 20.08.2019
comment
Хм, если я правильно понимаю, вы имеете в виду что-то вроде Выполнить команды командной строки? С помощью System.Diagnostics.Process.Start("CMD.exe", "dotnet restore '.\myproject.csproj' --packages '.\OutputFolder'"); вы можете программно запустить команду dotnet.   -  person Mar Tin    schedule 20.08.2019
comment
@EliSherer Это может быть решением, но когда я разверну его в определенной среде с хостом Windows / Linux, оно будет работать или нет! Что вы думаете?   -  person Tester User    schedule 20.08.2019
comment
@MarTin, когда я разверну его в определенной среде с хостом Windows / Linux, это вызовет риски или нет! Что вы думаете?   -  person Tester User    schedule 20.08.2019
comment
Да, это будет. Но вы можете проверить и обработать среду перед выполнением. Environment.OSVersion.Platform проверить платформу. Или var values = Environment.GetEnvironmentVariable("PATH"); проверить cmd.exe. Это всегда риск казнить третью сторону. То же самое и с dotnet. Вы должны убедиться, что dotnet существует как переменная среды PATH.   -  person Mar Tin    schedule 20.08.2019


Ответы (1)


Если с использованием оболочки все в порядке, вы можете попробовать выполнить следующие шаги для восстановления пакетов nuget с помощью С#.

  1. Загрузите последнюю версию Nuget.exe из NuGet Gallery Downloads.
  2. Добавьте Nuget.exe в свой проект C# и отметьте его как «Копировать», если он новее, для «Копировать в выходной каталог».
  3. Запустите ниже метод RestorePackages() с путем решения в качестве параметра

        public static void RestorePackages(string solutionPath)
        {
            var dir = AppDomain.CurrentDomain.BaseDirectory;
            ProcessStartInfo objPI = new ProcessStartInfo($"{dir}\\nuget.exe", $"restore \"{solutionPath}\" -Verbosity quiet");
            objPI.RedirectStandardError = true;
            objPI.RedirectStandardOutput = true;
            objPI.UseShellExecute = false;

            Process objProcess = Process.Start(objPI);
            string error = objProcess.StandardError.ReadToEnd();
            string output = objProcess.StandardOutput.ReadToEnd();

            objProcess.WaitForExit();
        }
person Chirag    schedule 04.06.2021