解决.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中<packages>节内整个package使用<!-- 引用XML段 -->隐藏(见红色文字部分):

<packages>

<!-- package id="BKEDV.CommandLineParser" version="1.0.4.0" targetFramework="net40" / -->

<package id="SharpVectors.Reloaded" version="1.2.0" targetFramework="net40" />

</packages>

完成,不再提示错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值