【问题标题】:Programmatically with C# code restore PackageReferences使用 C# 代码以编程方式恢复 PackageReferences
【发布时间】:2019-12-25 10:53:44
【问题描述】:

我正在尝试使用 C# 基本代码以编程方式恢复 .NET 框架和 .NET 核心项目的 packageReference

我想过使用 dotnet.exe / msbuild.exe 但我不知道怎么做!

我想模拟一下我们可以用 dotnet CLI 做什么:

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

但我想以编程方式进行。

感谢您的回答。

【问题讨论】:

  • 为什么不使用 shell 并实际运行 dotnet cli?
  • 嗯,如果我理解正确,您的意思是像Run Command Prompt Commands?使用System.Diagnostics.Process.Start("CMD.exe", "dotnet restore '.\myproject.csproj' --packages '.\OutputFolder'");,您可以以编程方式运行您的 dotnet 命令。
  • @EliSherer 这可能是一个解决方案,但是当我将它部署到具有 windows/linux 机器主机的特定环境时,它会起作用或不起作用!你怎么看?
  • @MarTin 当我将它部署到具有 windows/linux 机器主机的特定环境时,它会引发 风险 与否!你怎么看?
  • 会的。但是您可以在执行前检查和处理环境。 Environment.OSVersion.Platform查看平台。或var values = Environment.GetEnvironmentVariable("PATH"); 检查cmd.exe。执行第 3 方总是有风险的。 dotnet 也是如此。您必须先证明 dotnet 作为环境 PATH 变量存在。

标签: c# programmatically dotnet-cli packagereference dotnet-restore


【解决方案1】:

如果使用shell没问题,您可以尝试以下步骤使用c#恢复nuget包。

  1. NuGet Gallery Downloads下载最新版本的Nuget.exe
  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();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多