在项目中,我一直在使用一些自定义的NuGet源。显然其中一些不再可用,但我确实在另一台(仍在工作的)服务器上具有更新(只有更新)版本的软件包。有没有一种方法可以直接将软件包还原到最新版本,而无需手动替换.csproj和packages.config文件中的所有引用?
我尝试运行Updade-Package -Reinstall
,但只收到以下错误消息:
Some NuGet packages are missing from the solution. The packages need to be restored in order to build the dependency graph. Restore the packages before performing any operations.
答案 0 :(得分:1)
如果您使用过(仍然想使用)的某些软件包不再可用,我建议您对其进行备份。
在服务器上找到Nuget cache。在Windows上,位于
%userprofile%.nuget \ packages
发现要备份的软件包(和版本),并将.nupkg
文件复制到它们各自的文件夹中。
然后您有两个选择:
第一个选项的优势是可以在任何您想要的机器(开发机器,构建服务器...等)上使用的单一来源,但是您将有更多设置,尤其是对于身份验证/授权(因为它是私人供稿)
对于第二个选项:只需创建一个C:/Nuget
文件夹,然后放置所需的任何.nupkg
。
然后在Visual Studio中转到:
工具-> Nuget程序包管理器->程序包管理器设置->程序包源
点击绿色的+
按钮添加新的来源,只需为其命名为Local
,然后浏览到C:/Nuget
即可设置来源。
从现在开始,当您要还原Nuget程序包时,Visual Studio将首先查看nuget.org
feed,如果找不到引用的程序包,则将查看您的Local feed并缓存已安装的包。打包到机器的%userprofile%.nuget\packages
。
我希望能回答您的问题,我不太确定您的要求和对Nuget的了解。
更新:
我想我现在更了解您的问题。
首先,我认为您对Update-Package -Reinstall
命令有误解。它将按照已引用的相同版本重新安装软件包,但只需重新安装即可。例如,当您更改项目的目标框架时,这是一个有用的命令。然后,您可以重新安装相同版本的软件包,它们将重新定位此.NET Framework版本。
因此,如果nuget restore
无法正常工作,那么Update-Package -Reinstall
显然也会失败。
使用Nuget时,当某些问题不起作用时,您不应该坚持,而是找到可以使其再次起作用的调整。我无法计算我去不同的缓存删除了一些缓存包的次数。
我认为您应该尝试使用nuget restore
并查看是什么引起了问题的软件包,然后卸载这些软件包(如果它们不是,则将从.csproj
和packages.config
中删除引用(尚未安装在项目中),那么您最终可以安装这些软件包的最新版本。