解决.Net程序包失效,找不到程序包导致NuGet 包还原失败的问题

【背景】

很多时候,我们在开发.net程序时,引用了NuGet包。但有时,因为包服务器或包作者原因,出现.Net程序包失效,找不到程序包导致NuGet 包还原失败的问题。

这时,项目 XXX突然报错,找不到原引用的程序包:如:“BKEDV.CommandLineParser.1.0.4”。

如再加载、编译项目时,老出警告,烦!

【摘要】

解决方法是:反编译包引用中的.dll文件为新项目,再引用新项目,去除原项目中的包引用。

【错误提示】

如下:

错误项目 XXX 的 NuGet 包还原失败: 找不到“1.0.4”版本的程序包“BKEDV.CommandLineParser”。

(YourDiskNo):\Program Files (x86)\Microsoft SDKs\NuGetPackages\: 在源“(YourDiskNo):\Program Files (x86)\Microsoft SDKs\NuGetPackages\”上找不到包“BKEDV.CommandLineParser.1.0.4”。

https://api.nuget.org/v3/index.json: 在源“https://api.nuget.org/v3/index.json”上找不到包“BKEDV.CommandLineParser.1.0.4”。

开始时怀疑是包源服务器的问题,于是在VS设置中增加NuGet服务器地址:

https://www.nuget.org/api/v2/index.json:

依然报:无法加载源 https://www.nuget.org/api/v2/index.json 的服务索引。

响应状态代码不指示成功: 404 (Not Found)。

请查看“错误列表”窗口了解详细警告和错误。

【解决】

找到之前的引用包中.dll文件所在路径:

  1. 使用.NET Reflector 10.3反编译包引用中的.dll文件,如:CommandLineParser.dll文件,生成相关源代码。如运气差点,可能会报一些错误。没关系,Continue...

  1. 再使用dnSpy反编译,生成相关源码。

  1. 综合上述第1、2步的相关结果,排除相关错误,OK。

  1. 新建项目(如:CommandLineParser),将第3步中结果导入项目,重新在您的XXX项目中引用现有项目,如:CommandLineParser。

  1. 去除源项目中的包引用。打开源项目中的packages.config文件,将包引用的XML中节内整个package使用隐藏(见红色文字部分):

完成,不再提示错误。

你可能感兴趣的:(C#类,阿山杂谈,C#,.net,Nuget,包引用,错误)