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

the*_*cks 6 .net msbuild visual-studio nuget .net-standard

我有一个Visual Studio解决方案:

  • 2个.NET Standard 2.0项目(.csproj)
    • proj A(类库):proj refs - > proj B,没有Nuget包
    • proj B (类库):没有proj引用,没有Nuget包
  • 2 .NET Framework 4.7.2项目(.csproj)
    • proj C(类库):proj refs - > proj B,几个Nuget包
    • proj D(测试项目):proj refs - > proj C,proj B&proj A,几个Nuget包

这个解决方案在运行VS Community 2017的本地机器上运行良好15.7.3此解决方案也可以在我的构建机器上构建,该机器使用MSBuild相同版本的相同VS.

问题

当我添加Nuget包(在本例中Newtonsoft)时,会出现问题proj A.该解决方案在我的本地计算机上构建良好,但在使用时不起作用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项目不在一起的NuGet当他们在同一个玩好.sln,因为如果我完全删除proj Cproj D生成成功我的构建机器上.我还可以确认Newtonsoft包在我的C:/User/.nuget/packages文件夹中,但不在./packages解决方案目录的文件夹中(我很确定是否应该发生,因为它是一个.NET Standard项目?).

CI .yml文件

nuget.exe restore $SOLUTION_FILE
MSBuild.exe '/p:Configuration=release' $SOLUTION_FILE
Run Code Online (Sandbox Code Playgroud)

笔记

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

the*_*cks 3

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