我正在开发一个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中看到了类似的问题,我已经尝试了所有上述建议的解决方案。尽管如此,我还是不知道为什么它会失败。
答案 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'))" />
删除它解决了这个问题。