我见过许多关于安装NuGet
软件包的问题和示例,但没有关于更新软件包的问题和示例。
更新NuGet
套餐的最佳方法是什么?我正在尝试从ASP.NET MVC
应用程序执行此操作以更新UWP
项目中的包,其中projec.json
用于包引用。
我是否还需要更新.csproj
和project.json
个文件?
答案 0 :(得分:2)
在与NuGet.VisualStudio
和NuGet.Core
软件包挣扎并花费了大量时间之后,我发现最好的方法是使用NuGet CLI和.NET Process
对象。下载nuget.exe
后,这是更新包的方法:
var updateOutput = new List<string>();
var updateError = new List<string>();
var updateProcess = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "the path to nuget.exe file",
Arguments = "update " + "project path including .csproj file",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
updateProcess.Start();
while (!updateProcess.StandardOutput.EndOfStream)
{
updateOutput.Add(updateProcess.StandardOutput.ReadLine());
}
while (!updateProcess.StandardError.EndOfStream)
{
updateError.Add(updateProcess.StandardError.ReadLine());
}
之后,您根据自己的需要决定使用updateOutput
和updateError
做什么。
注意:在我的情况下,我有project.json
用于包配置,nuget.exe
需要packages.config
文件。所以,我创建了一个临时的packages.config
文件,在更新包之后我删除了它。像这样:
var ProjectPath = "the path to project folder";
var input = new StringBuilder();
input.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
input.AppendLine("<packages>");
using (var r = new StreamReader(ProjectPath + @"\project.json"))
{
var json = r.ReadToEnd();
dynamic array = JsonConvert.DeserializeObject(json);
foreach (var item in array.dependencies)
{
var xmlNode = item.ToString().Split(':');
input.AppendLine("<package id=" + xmlNode[0] + " version=" + xmlNode[1] + " />");
}
}
input.AppendLine("</packages>");
var doc = new XmlDocument();
doc.LoadXml(input.ToString());
doc.Save(ProjectPath + @"\packages.config");
// After updating packages
File.Delete(ProjectPath + @"\packages.config");