从命令行使用msbuild时缺少nuget包错误

时间:2014-06-27 13:25:13

标签: msbuild nuget

我正在开发一个silverlight应用程序。我们正在使用nuget包,但我们不检查包,并且应该在构建时恢复包。该解决方案在visual studio中编译得很好。 我正在尝试使用msbuild

在命令行中添加编译任务
  

执行{C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe $ slnFile / p:OutputPath = $ outputPath / p:Configuration = Release / p:SolutionDir = $ rootDir \ Source \ / verbosity :minimal / nologo / m:4}"构建失败

在执行此步骤之前,我明确地进行了nuget恢复。

  

执行{C:\ project \ nuget.exe restore $ solutionFile}"恢复失败"

此步骤传递消息" packages.config"中列出的所有包。已安装。

但是当实际的构建步骤发生时,构建失败并显示消息

  

此项目引用此计算机上缺少的NuGet包。启用NuGet Package Restore以下载它们。有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。丢失的文件是\ Source \ .nuget \ NuGet.targets。

我正在进行明确的nuget恢复,并启用了

"允许nuget下载丢失的包"在视觉工作室和  "启用nuget包恢复"在解决方案级别。

我的nuget.config有" disableSourceControlIntegration"值="真"

我在stackoverflow中看到了类似的问题,我已经尝试了所有上述建议的解决方案。尽管如此,我还是不知道为什么它会失败。

2 个答案:

答案 0 :(得分:2)

您不需要同时执行 nuget.exe恢复,并让MSBuild使用NuGet.targets来恢复NuGet包。你应该选择其中一个。

我怀疑您的问题是 $ rootDir 未定义,并且您传递给MSBuild的 SolutionDir 属性是:

<强> \来源

在我的项目文件中,我有:

 <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

因此,如果 SolutionDir \ Source ,则解决方案将无法使用相同的错误消息进行编译。

答案 1 :(得分:2)

在我看来,csproj文件不知何故有这个:

  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
  <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />

删除它解决了这个问题。