我们正在开发工作中的WPF应用程序,它具有各种“公共”依赖关系(Unity等)。
添加新项目,然后设置每个项目的NuGet包依赖关系都很好,但在升级方面,这真的很痛苦,因为这意味着我们必须遍历每个项目,删除旧的引用,然后从NuGet中重新获取最新的包。
例如,今天,我的任务是将Prism从5.0升级到6.0 (这无论如何都有突破性的变化),这意味着,除了修复所有命名空间冲突之外,我还必须遍历每个项目,删除旧的引用,添加新的依赖项,并进行清洗和重复。
我的问题是,是否有更明智的方法来处理这个问题,还是这是标准的方法?
事先非常感谢,
更新:
我最关心的是没有出现在软件包管理器上的“重大”升级。Version5.0 -> 6.0升级将被视为一次重大升级,因此不会在NuGet包管理器中对其进行自动更新。
我不期望NuGet能够自动地为我完成这个任务,因为这样的升级可能(而且经常会)包括破坏更改,但我想知道是否有一种方法比删除每个项目的项目和packages.config的引用,然后使用NuGet重新添加它们,更轻松地完成主要的升级。对于一个相对较大的项目,这非常耗时,我想知道是否有人有更好的方法来管理这种依赖关系。
发布于 2015-09-22 23:38:12
如果您像您所说的那样使用VS2013,您可以通过右键单击您的解决方案并选择“管理用于解决方案的NuGet包”来管理您的所有NuGet包。这会弹出一个对话框,在该对话框中,您可以查看为解决方案中的所有项目安装的所有包和所有可用更新的包。升级包时,VS负责处理所需的所有引用更改。如果包有损坏的更改,那么您仍然需要解决这些问题。
免责声明:我从未在WPF项目/解决方案上工作过,但是对于Web/Forms应用程序,NuGet包是这样处理的。
发布于 2015-09-24 04:33:06
我能理解你的痛苦,因为我有类似的问题,但没有简单的方法。但是,当然,您需要以不同的方式打破日常开发和依赖更新扩展的过程。
对于我从事的项目,我使用在您所使用的解决方案之间共享的公共存储库路径,您需要删除所有的解决方案文件夹引用,以获得一个干净的状态。
对于您使用的每个解决方案,您都需要修改指向公共目标存储库的属性组(我使用的是相对路径)
一旦设置好所有内容,您就可以使用脚本执行更新(我使用python运行时脚本)。
实际上,您可以查看设置通用nuget包-用于参考更新的文件夹的详细信息,但是对于自动化过程,您所看到的似乎是什么。
发布于 2015-09-25 22:51:01
在Xamarin中尝试升级多个带有alpha通道问题的包时,我也遇到了类似的问题,这也没有VS 2015 NuGet管理器的微妙之处。最后,我编写了一个非常简单的PowerShell脚本,我每天运行几次。
#
# 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命令行引用。我可能弄错了,但听起来您的场景可以使用Update命令完成。
https://stackoverflow.com/questions/32710992
复制相似问题