MSBuild 在其他 .NET Framework 项目的解决方案中找不到 .NET Standard 项目的包

MSBuild can't find package for .NET Standard project in solution with other .NET Framework projects

我有一个 Visual Studio 解决方案:

此解决方案在我的本地计算机上构建良好 运行 VS Community 2017 15.7.3 该解决方案在我的构建机器上也可以正常构建,该机器使用来自同一版本的同一 VS 的 MSBuild

问题

当我向 proj A 添加 Nuget 包(在本例中为 Newtonsoft)时出现问题。该解决方案在我的本地机器上构建良好,但在使用 MSBuild 工作。此外,如果我使用安装在那里的 VS 在我的构建机器上加载解决方案,它构建得很好。

引发的错误是:

error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?)

我想我已经将问题缩小为 .NET Standard.NET Framework 项目在同一个 .sln 中时不能与 Nuget 很好地协同工作因为如果我完全删除 proj C & proj D 构建在我的构建机器上成功。我还可以确认 Newtonsoft 包在我的 C:/User/.nuget/packages 文件夹中,但不在解决方案目录的 ./packages 文件夹中(我很确定是否应该发生,因为它是一个 .NET Standard 项目?)。

CI .yml 文件

nuget.exe restore $SOLUTION_FILE
MSBuild.exe '/p:Configuration=release' $SOLUTION_FILE

备注

我读了很多书试图找到与此类似的问题,但我得到的最接近的是看起来很像 this one 的问题。这个问题是相似的,但使用 .NET Standard 项目本身作为 Nuget 包,因为我试图将 Nuget 包放入 .NET Standard 项目本身。也许我需要将我所有的 .NET Standard 项目提取到一个 Nuget 包中,而不是在同一个解决方案中使用它们?

正如 Leo Lieu 指出的那样,使用 msbuild /t:restore "YourSolutionFile.sln" 是诀窍,尽管我必须像 运行 nuget.exe restore "YourSolutionFile.sln" 那样做,我觉得这很奇怪......