【问题标题】:NuGet not getting missing packagesNuGet 没有丢失包
【发布时间】:2013-07-21 17:56:13
【问题描述】:

我在 VSS 中有以下项目结构

现在在 Visual Studio 2010 Pro 中: 我打开 Solution2,然后将 Library1 添加为外部项目

Library1 引用了我通过 NuGet 获得的两个外部库。当我构建我的 Solution2 时,一切正常。 所以我签入了我所有的项目。

问题: 当另一个开发人员从 sourcesafe 获取 Solution2 并进行构建时,它说 Library1 缺少那些外部库 dll。

试过以下:

1:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

所以现在我在 Solution2 下有 .nuget 文件夹,它被签入。但这仍然没有带来 dll。

我怀疑 Library1 是在一个单独的解决方案中导致了这个问题。

任何想法如何通过 NuGet 自动获取丢失的包?

更新:
Xavier 的建议有所帮助,以下是他的两篇博文:

【问题讨论】:

    标签: visual-studio-2010 visual-studio nuget nuget-package


    【解决方案1】:

    在这里查看我们的答案:Nuget Package restore with git submodule,此选项不涉及任何*.csproj 操作

    【讨论】:

      【解决方案2】:

      使用您当前的设置,您应确保已在两个解决方案上启用 NuGet 包还原,并且 Solution2 nuget.targets 应将 nuget install 命令指向 Solution1\Packages 输出目录。您的文件夹结构将如下所示:

      原因:Library1.csproj 引用指向 Solution1\Packages 位置。将此项目添加到Solution2时,项目引用没有改变,但解决方案将恢复Solution2\Packages而不是Solution1\Packages中的包。

      如果您已经在 Solution2 的项目中安装了包,则需要确保这些包仍然针对 Solution2\Packages 进行恢复。为此,我建议您在共享项目文件中设置一个 MSBuild 属性(在 nuget.targets 文件的导入语句上方)并将这个 MSBuild 属性值传递给 RestoreCommand。 p>

      例如:

      $(SolutionDir)..\Libraries\Packages

      并调整nuget.targets文件,例如:

      $(SolutionDir)\Packages

      ...

      ... -o "$(PackagesOutDir) "


      可选,如果您想使用单个 Packages 文件夹,您可以修改 both .nuget\NuGet.targets 文件并将 -o(或 -OutputDirectory)开关设置为nuget install 命令。

      将此附加到 RestoreCommand 元素:-o "$(SolutionDir..\Packages" 将确保所有包都恢复在一个位置:

      请注意,每次安装 NuGet 包后,您都必须手动更新已安装的包引用!

      【讨论】:

      • Xavier,我确实在两个解决方案上都启用了恢复,并且与每个解决方案下的 .nuget 和 packages 文件夹具有完全相同的结构。我只在 Packages 文件夹中包含了 repositories.config 文件。在我的本地机器上它工作正常,但是当另一个开发人员从 VSS 中获取 Solution2 时,只获取了 Library1 项目,而不是包文件夹。我会玩一点.targets。谢谢。
      • 严格来说,不需要提交 Packages 文件夹(尽管我更喜欢在 VCS 中拥有 repositories.config 文件)。 .nu​​get 文件夹中使用的是哪个版本的 nuget.exe?您可以使用“nuget.exe update -self”将其更新到最新版本。另外,你用的是 TFS 吗?如果是,工作区映射是否正确?
      • NuGet 版本 2.6.4。我正在使用 VisualSourceSafe。当我打开 Solution2 时,我注意到一件事,Library1 所需的包安装在 Solution2/packages 文件夹中,但 Library1 无法加载它们。
      • 我认为这很重要。我已经更新了我的答案。您的 Library1 项目正在引用来自 Solution1\Packages 的二进制文件。但是,Solution2 将恢复 Solution2\Packages 中的包,而不更新任何项目引用。
      • 你在开玩笑吧?您永远不应该将库的元数据设置为需要有关托管项目的知识(例如“\..\Libraries”路径)。这是最糟糕的黑客攻击。如果您的开发人员下载您的库的文件夹结构与他们在此处设置的方式完全相同,那么这确实有效。
      猜你喜欢
      • 2016-04-03
      • 2016-10-30
      • 2020-11-06
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 2017-08-03
      相关资源
      最近更新 更多