gpt4 book ai didi

c# - 在 Visual Studio 2015 解决方案中恢复所有 Nuget 包

转载 作者:太空狗 更新时间:2023-10-30 00:38:49 24 4
gpt4 key购买 nike

我已经阅读了很多关于 SO 和 NuGet 的答案(以及一般的互联网,真的),但我似乎无法克服我在 Visual Studio 2015 中使用 NuGet 包还原时遇到的问题。我有以下内容场景。

解A结构

--项目A

如果我打开并构建解决方案 A,我会看到显示 nuget 包恢复进度的对话框,并且解决方案构建成功。

方案 B 结构

--项目A

--项目B

但是,假设我从未构建过解决方案 A(即来自 TFS 的新拉取),如果我打开并构建解决方案 B,我会看到显示 nuget 包恢复进度的对话框,但构建失败,因为项目 A 无法构建.

似乎正在发生的事情是 NuGet 正在恢复项目 B 的包,而不是项目 A 的包,因此构建失败。到目前为止,如果我查看项目 B 的引用,所有 NuGet 引用都已解决,但项目 A 的引用仍然损坏。

几点:

  • 我已禁用 NuGet 的源代码管理集成,因此我不会 checkin Packages 文件夹。
  • 每个项目都有自己的 packages.config 文件
  • 解决方案 B 中的构建顺序是项目 A 然后是项目 B

想法将不胜感激。

最佳答案

默认情况下,NuGet 在解决方案根目录中创建解决方案的 packages 文件夹,每个项目将其包 DLL 引用到该“本地”包文件夹。在您的示例中,如果您打开项目 A 的 .csproj 文件,您可能会看到引用路径类似于 ..\packages\[package name]\[etc]

因此,当您从 TFS 重新拉取并构建解决方案 B 时,项目 A 无法找到其 DLL,因为 c:\workspace\Solution A\packages 尚不存在(或其他任何原因)绝对路径在你的机器上)。

要更正此问题,请使用在 c:\workspace\packages 中创建的共享包文件夹。为此,您必须向每个解决方案中的 NuGet.config 添加一个额外的节点(有关详细信息,请参阅 https://docs.nuget.org/consume/nuget-config-file;我还假设您在 c:\workspace\Solution A\.nuget 中有一个 NuGet 文件夹):

<config>
<add key="repositorypath" value="..\..\packages" />
</config>

我在这里使用的是相对路径,但您也可以使用绝对路径,文档中说您也可以使用 %HOME%

执行此操作,然后重新启动 Visual Studio。下次打开包管理器时,它会询问您是否要恢复丢失的包,假设您单击是,它会将它们放在新位置。最后一步是编辑 .csproj 文件并将 ..\packages 的所有实例更改为 ..\..\packages(或者您可以卸载并重新安装包,但我发现编辑 .csproj 的速度要快得多)。

关于c# - 在 Visual Studio 2015 解决方案中恢复所有 Nuget 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38109666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com