【问题标题】:Nuget packages are installed outside of the project solutionNuget 包安装在项目解决方案之外
【发布时间】:2019-06-24 07:44:02
【问题描述】:

假设我有一个名为 MyFirstSolution 的解决方案,其中我有一个名为 MyFirstProject 的项目。在那个项目中,我正在安装 nuget 包,如 Dapper、EntityFramework 等......

事情应该如何运作: packages 文件夹应该创建到 MyFirstSolution 文件夹中,并且应该下载并安装项目中引用的所有 nuget 包。

我遇到的问题是未创建包文件夹,并且将 nuget 包下载到 MyFirstSolution 文件夹上方的一级文件夹中名为 XYZHelper 的文件夹中。

当我从一些存储库下载解决方案时,nuget 包被恢复到同一个文件夹,而不是解决方案本身,并且 csproj 文件中的引用表明它们应该在 solutionFolder\packages 中,因此我的所有项目都不会构建。

如果我手动将包复制到它们应该存在的文件夹中,这一切都很好,但在每次构建后都会将副本复制到该 XYZHelper 文件夹中。

我没有在项目中配置任何后期构建事件或类似的东西。我猜这和视觉工作室有关,但我不知道是什么。

【问题讨论】:

  • 你能说得更具体些吗?您的问题的一种解释是您正在准确描述 NuGet 和 .NET 构建系统如何正常工作。我不确定您是在问这个问题还是其他问题。
  • 我已经用更多细节编辑了这个问题
  • sln 文件是否与 csproj 处于同一级别?
  • 解决方案文件在解决方案文件夹中,其中每个项目都有一个文件夹,该文件夹中是csproj文件
  • “当我从某个存储库下载解决方案时”与该存储库的所有者交谈并要求他/她解决该问题。

标签: visual-studio nuget


【解决方案1】:

可以使用nuget.config 更改解决方案包文件夹(设置名称称为repositoryPath)。因此,请检查可能设置此值的 nuget.config 文件。您可以通过从 nuget.org/downloads 下载 nuget.exe 并运行 nuget restore MyFirstSolution.sln 来获取还原使用的 nuget.config 文件的确切列表。在输出接近尾声时,它将列出每个已读取的 nuget.config 文件。

当没有更改解决方案包文件夹(存储库路径)的配置文件时,它始终默认为与.sln 文件位于同一目录中的名为packages 的子目录。我知道为packages.config 项目更改此位置的唯一方法是使用nuget.config 文件,因此我相信您应该能够通过找到正确的配置文件来解决它。

【讨论】:

    【解决方案2】:

    事情应该如何工作:应该将包文件夹创建到 文件夹 MyFirstSolution 和里面应该下载和安装程序 项目中引用的所有 nuget 包。

    您好 Stdfan,不确定您的 VS 版本。但是对于 VS2015 及更早的版本,nuget 包是由 packages.config 文件控制的。事情应该像你提到的那样工作。

    但是对于 VS2017 和 VS2019,他们有两种方法来管理 nuget:Packages.config 和 PackageReference。对于 PackageReference 格式,包存储在C:\Users\xxx\.nuget\packages 中。所以如果你的 vs 版本是 VS2017 或者 VS2019,你可以试试,如果把格式改成PackageReference 帮助解决这个问题。

    我遇到的问题是未创建 packages 文件夹并且 nuget 包在 MyFirstSolution 上一层下载 文件夹到某个名为 XYZHelper 的文件夹中。

    方向1:

    就像 zivkan 建议的那样,我也认为有些东西会影响恢复过程。Packages.config 格式正常,文件夹将存储在 packages 文件夹中。但根据 this document,我们可以自定义 nuget.config 文件来控制 nuget 的行为。所以请检查locations where nuget.config exists,计算机的 nuget.config 或用户的 nuget.config 中的某些设置可能会导致此问题。(除非我们在那里创建,否则用户的 nuget.config 将不存在)

    方向2:

    当我从一些存储库 nuget 包下载解决方案时 恢复到同一个文件夹

    由于恢复过程在构建输出中是不可见的,因此 nuget 恢复可能运行良好,但构建过程中的某些东西将包文件夹的内容移动到 XYZhelper。

    检查customize your build。请检查 Directory.build.xx 文件的目录结构,如果它存在于结构的任何文件夹中,它会影响您的构建过程:C:\xxx\lancel\source\repos\

    我没有配置任何后期构建事件或类似的东西 项目。我猜这与视觉工作室有关,但我 不知道是什么。

    这与 VS 正常设置无关。我认为某些自定义文件会导致此问题(无论是 nuget.config 还是 directory.build.xxx),请检查您是否安装了任何第三方软件或 vs 扩展。尝试关闭 vs,删除 .vs、bin 和 obj 文件夹,然后以 safe mode 身份运行 vs。

    【讨论】: