有没有一种聪明的方法来处理NuGet中的包依赖?

时间:2015-09-22 07:35:01

标签: c# visual-studio nuget

我们正在开发一个WPF应用程序,它具有各种常见的#34;依赖(Unity,Prism等)。

在添加新项目然后为每个项目设置NuGet包依赖项时一切都很好但是当涉及到升级时,它真的很痛苦,因为这意味着我们必须经历每个项目,删除旧的引用,然后从NuGet中重新获取最新的包。

今天,例如,我的任务是将Prism从5.0升级到6.0(无论如何都有破坏性更改),这意味着,除了修复我必须通过每个项目的所有命名空间冲突等,删除旧的参考文献,添加新的依赖,并冲洗和重复。

我的问题是,有没有更智能的方法来处理这个问题,还是这是标准方法?

非常感谢,

更新

我最关心的是" major"不会出现在包管理器上的升级。版本5.0 - > 6.0升级将被视为主要升级,因此不会在NuGet包管理器中应用自动更新。

我不希望NuGet能够为我自动执行此操作,因为此类升级可能(并且通常会)包括重大更改,但我想知道是否有方法进行主要升级比删除项目的引用和每个项目的packages.config,然后使用NuGet重新添加它们要痛苦得多。对于一个相对较大的项目,这非常耗时,我想知道是否有人有更好的方法来管理这种依赖。

3 个答案:

答案 0 :(得分:3)

如果你像你说的那样使用VS2013,你可以通过右键点击你的解决方案并选择' Manage NuGet Packages for Solution'来管理你的所有NuGet包。这将打开一个对话框,您可以在其中查看为解决方案中的所有项目安装的所有软件包以及所有可用更新的软件包。当您升级软件包时,VS会处理所需的所有参考更改。如果包装有重大变化,那么你仍然可以解决问题。

免责声明:我从未参与过WPF项目/解决方案,但对于Web / Forms应用程序,NuGet软件包是以这种方式处理的。

答案 1 :(得分:0)

我能理解你的痛苦,因为我有类似你的问题,但没有简单的方法。但当然,您需要以不同的方式打破日常开发和依赖关系更新的推出。

对于我工作的项目,我使用在您使用的解决方案之间共享的公共存储库路径,并且您需要删除所有解决方案文件夹引用以获得干净状态。

对于您处理的每个解决方案,您需要修改指向公共目标存储库的属性组(我使用相对路径)

完成所有设置之后,您可以使用脚本实际执行更新(我使用python运行时脚本)

您实际上可以查看setting up common nuget-packages-folder for reference updates的详细信息,但这看起来就像您在寻找自动化过程

答案 2 :(得分:0)

在尝试使用Xamarin Studio中的alpha通道问题升级多个软件包时遇到了类似问题,而Xamarin Studio也没有VS 2015 NuGet管理器的细节。我最后写了very simple PowerShell script,我每天跑多次。

#
# This script updates local ibGib NuGet packages for mobileGib Android app solution.
# For convenience in copy+paste in manager console:
# ../UpdateLocalNugetPackages.ps1

Update-Package commonGib
Update-Package ibGib
Update-Package languageGib.Biz
Etc.

我相信您可以根据自己的需要定制NuGet命令。

另外,如果你不了解它,你一定要阅读NuGet command line reference。我可能会弄错,但听起来你的场景可以使用Update命令。