Packages文件夹可以在项目级别吗?

Can the Packages folder be at the project level?

我的一位同事在另一个项目上工作,正在使用 TFS 构建。他收到这些错误:

##[error]Unable to find version '12.0.0.1' of package 'Microsoft.ReportViewer.Common.v12'

他联系我寻求帮助(我是当前的 TFS 管理员)。查看他在 TFS 中的回购,我看到他的回购有两个 Packages 文件夹。一个是解决方案级别。另一个在启动项目级别内。两者都包含 NuGet 包,尽管我确实看到了两者之间某些 NuGet 包的差异,例如 Microsoft.ReportViewer.Common.v12。

我在此处寻找与 NuGet 包相关的其他 post。我发现这个 post NuGet issues with packages.config, project references and the solutionwide packages folder, which is helpful, but I've still got a question. That post and this Microsoft document article Install and manage packages in Visual Studio using the NuGet Package Manager 让我相信应该只有一个 Packages 文件夹,据我所知是在解决方案级别。是不是以前Visual Studio和NuGet把Packages文件夹放在项目级别?

附录

这是解决方案的屏幕截图,其中有一个我用红色标记突出显示的解决方案 (.sln) 级别的 Packages 文件夹,以及我在 PharmacyWarehouse 项目级别 (.csproj) 中的另一个 Packages 文件夹也用红色标记突出显示:

如果我对评论的猜测是正确的,请检查下面这些。

你是对的。默认情况下,VS 始终将 packages 文件夹放在解决方案文件夹中。就是这么设计的。

所以我认为有人已经将 packages 文件夹迁移到项目文件夹中。然后手动更改 csproj 文件中引用的 dll 的 hintpath

如果是这样,那是你自己的行为,而不是VS本身。并且您已将项目级别的所有包内容上传到 TFS。

一些扩展点

但是packages文件夹的位置可以由a new nuget.config file控制。创建一个名为nuget.config的文件,然后将其放在任何以上项目级别,然后它将作用于子目录或较低级别项目文件夹中的任何项目。

你应该注意到

至少可以把packages文件夹放在solution文件夹以上。而且它不能将文件夹放入项目文件夹中。看到这个 .

所以先说明是单独动作,nuget.config文件不能动作到项目文件夹中

nuegt.config文件至少要放在解决方案文件夹或上面。所以这个函数(添加一个新的nuget.config)不能控制所有项目的项目文件夹中的nuget行为。

它的内容可能是这些:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <config>
         <add key="repositoryPath" value="packages" />
    </config>
</configuration>

VS 支持自定义 nuget.config 文件来控制 nuget 的行为。更多信息,您可以参考this link.

它将在 above level\packages 下创建 packages 文件夹。它将根据nuget.config的当前地址,结合RepositoryPath的值得到最终的新地址。所以你必须同时上传文件。

作为结论

该行为是由修改它的人造成的。你必须联系它并尝试将 packages 文件夹的全部内容上传到 TFS 上,然后添加一个 nuget restore 任务。

或者您可以将 packages 文件夹迁移回解决方案文件夹。你必须在 VS IDE 上进行。 运行update-package -reinstallTools-->Nuget Package Manager-->Package Manager Console.