【背景】
很多时候,我们在开发.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文件所在路径:
- 使用.NET Reflector 10.3反编译包引用中的.dll文件,如:CommandLineParser.dll文件,生成相关源代码。如运气差点,可能会报一些错误。没关系,Continue...
- 再使用dnSpy反编译,生成相关源码。
- 综合上述第1、2步的相关结果,排除相关错误,OK。
- 新建项目(如:CommandLineParser),将第3步中结果导入项目,重新在您的XXX项目中引用现有项目,如:CommandLineParser。
- 去除源项目中的包引用。打开源项目中的packages.config文件,将包引用的XML中<packages>节内整个package使用<!-- 引用XML段 -->隐藏(见红色文字部分):
完成,不再提示错误。