【问题标题】:NuGet - uninstall & remove dependencies ONLY if other projects don't depend on them?NuGet - 仅当其他项目不依赖它们时才卸载和删除依赖项?
【发布时间】:2016-08-22 19:59:41
【问题描述】:
我有一个 NuGet 包,其中除了依赖于其他包之外什么都没有。所以基本上把它想象成“包的包”。其中一个包依赖于我们项目的其他部分也使用的第三方软件。
我的问题是我想卸载 package-of-packages,为此我指定了 -RemoveDependencies 选项。但是,我收到一条错误消息“无法卸载 <third-party package>,因为 <another package we use> 依赖于它。
只有在其他项目不依赖它的情况下,有没有办法卸载依赖项?
【问题讨论】:
标签:
c#
.net
visual-studio
nuget
【解决方案1】:
我通过更改“package-of-packages”范式实现了我想要的结果。我没有将其他包标记为依赖项,而是创建了一个 tools/ 文件夹,并在其中放置了一个 install.ps1 和 uninstall.ps1 powershell 脚本,它们在安装或卸载时运行。 Read more here.
在这些脚本中,我只需发出命令来安装或卸载我选择的软件包。默认情况下,Uninstall-Package 不会删除依赖项,这使我的工作更轻松。它并没有实现我最初的目标,即仅删除项目其他部分不需要的依赖项,它只是保留了任何二阶依赖项。这对我来说不是问题,因为我的包中只有一个具有二阶依赖项。
【解决方案2】:
对于单个项目
Get-Packages -ProjectName <project> | Uninstall-Package -ProjectName <project>
在包管理控制台中应该可以解决问题。
由于依赖关系而无法卸载的包将卸载失败,而没有依赖关系的包将卸载成功。
【解决方案3】:
您需要先卸载所有依赖它的 NuGet 包。然后你就可以移除这些依赖了。
因为如果有其他包依赖它,如果你删除它,这些包将失去依赖,这将导致这个包不能工作。