开发C#项目时通过Nuget引用添加依赖很方便,但是调试的时候就不一样了。


情景再现

我们有一个超级基础的库A,我们的多个公共组件B,C,D,和最终产品E都依赖于库A

现在我们在开发A的新功能时,期望能在最终产品E中得到测试验证。

不可行方法

  • 通过添加引用的方式添加本地包

    1535095331174

    由于最终产品E的依赖项,依赖于nuget上的库A,nuget发现有同名dll就会出现冲突

可行方法

  • 最简单的方法是,我们打出一个alpha包,发送到nuget服务器中,然后在最终产品E中升级

    缺点是成本较高,每次测试都打一个包上传,版本号上升搜搜的。前提还是每个开发小伙伴都能够上传nuget

  • 另一个较为方便的方法是,我们使用国内著名WPF大师猫神(晒太阳的猫),开发的DLL源码调试工具DLL Reference Path Change Auto - Visual Studio Marketplace

    这个工具非常棒,有着全5星好评,大家快去下载

懒人方法

替换nuget缓存

我们知道在vs中的nuget包,从nuget服务器中下载之后会添加到本地nuget缓存目录。之后每次编译时只需要从nuget缓存中获取现有的dll进行编译。那么我们就可以通过替换nuget缓存目录中的文件实现使用本地dll调试。

实操

  • 我们找到目标nuget库所在的缓存目录,注意版本号要相同哦

    1535099060401

  • 将原有的dll改为bak,此时我们发现vs对项目中所有有关于这个库的引用都飘红了,提示需要还原nuget

    1535099341200

  • 然后我们将本地的dll放进去,发现一家可以成功使用本地包的方法啦~~

    1535099439817

    1535099623364

这个方法存在的缺点是,nuget缓存会影响所有项目,如果忘记调试后改回来,容易让其他项目出错

高级懒人方法

搭建本地nuget源

  • 找到vs中工具-nuget管理器

    1535099819093

  • 添加一个本地程序包源

    1535099919734

  • 然后你可以在vs中的指定项目右键-打包(需要新格式才能支持),生成一个本地nuget包,放到刚刚的文件夹中

  • 然后在产品项目里指定本地的程序包源,就可以看到你本地的nuget包了

    1535100150183


本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/%E5%BF%AB%E6%8D%B7%E8%B0%83%E8%AF%95Nuget%E5%8C%85.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系