当尝试使用TFS服务时,出现NuGet包丢失错误

10

我希望有人可以帮助诊断我的构建出了什么问题。我正在使用Visual Studio 2012、NuGet 2.7和TFS服务(git)。我一直无法解决以下错误:

"C:\a\src\src\RecipeDb.Mvc\RecipeDb.Mvc.csproj (361): 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=317567."

我已启用软件包还原功能(不过我听说使用NuGet 2.7就无关紧要了)。无论如何,我在这个问题上找到了一篇有帮助的博客文章: 博客文章

以下是我的当前构建脚本:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
         DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <OutDir>$(MSBuildThisFileDirectory)bin</OutDir>
    <Configuration>Release</Configuration>
    <ProjectProperties>
        OutDir=$(OutDir);
        Configuration=$(Configuration);
    </ProjectProperties>
  </PropertyGroup>

  <ItemGroup>
    <Solution Include="$(MSBuildThisFileDirectory)src\*.sln" />
  </ItemGroup>

  <Target Name="RestorePackages">
    <Exec Command="&quot;$(MSBuildThisFileDirectory)src\.nuget\NuGet.exe&quot; restore &quot;%(Solution.Identity)&quot;" />
  </Target>

  <Target Name="Clean">
    <MSBuild Targets="Clean"
             Projects="@(Solution)"
             Properties="$(ProjectProperties)" />
  </Target>

  <Target Name="Build" DependsOnTargets="RestorePackages">
    <MSBuild Targets="Build"
             Projects="@(Solution)"
             Properties="$(ProjectProperties)" />
  </Target>

  <Target Name="Rebuild" DependsOnTargets="RestorePackages">
    <MSBuild Targets="Rebuild"
             Projects="@(Solution)"
             Properties="$(ProjectProperties)" />
  </Target>

</Project>

以下是我的构建日志:

Build started 9/27/2013 1:01:14 AM.
Project "C:\a\src\build.proj" on node 1 (default targets).
RestorePackages:
  "C:\a\src\src\.nuget\NuGet.exe" restore "C:\a\src\src\RecipeDb.sln"
Project "C:\a\src\build.proj" (1) is building "C:\a\src\src\RecipeDb.sln" (2) on node 1 (Build target(s)).
ValidateSolutionConfiguration:
  Building solution configuration "Release|Any CPU".
Project "C:\a\src\src\RecipeDb.sln" (2) is building "C:\a\src\src\RecipeDb.Mvc\RecipeDb.Mvc.csproj" (3) on node 1 (default targets).
C:\a\src\src\RecipeDb.Mvc\RecipeDb.Mvc.csproj(361,5): error : 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=317567.
Done Building Project "C:\a\src\src\RecipeDb.Mvc\RecipeDb.Mvc.csproj" (default targets) -- FAILED.
Project "C:\a\src\src\RecipeDb.sln" (2) is building "C:\a\src\src\RecipeDb.Mvc.Tests\RecipeDb.Mvc.Tests.csproj" (5) on node 1 (default targets).
C:\a\src\src\RecipeDb.Mvc.Tests\RecipeDb.Mvc.Tests.csproj(144,5): error : 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=317567.
Done Building Project "C:\a\src\src\RecipeDb.Mvc.Tests\RecipeDb.Mvc.Tests.csproj" (default targets) -- FAILED.
Done Building Project "C:\a\src\src\RecipeDb.sln" (Build target(s)) -- FAILED.
Done Building Project "C:\a\src\build.proj" (default targets) -- FAILED.

Build FAILED.

"C:\a\src\build.proj" (default target) (1) ->
"C:\a\src\src\RecipeDb.sln" (Build target) (2) ->
"C:\a\src\src\RecipeDb.Mvc\RecipeDb.Mvc.csproj" (default target) (3) ->
(EnsureBclBuildImported target) -> 
  C:\a\src\src\RecipeDb.M
vc\RecipeDb.Mvc.csproj(361,5): error : 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=317567.


"C:\a\src\build.proj" (default target) (1) ->
"C:\a\src\src\RecipeDb.sln" (Build target) (2) ->
"C:\a\src\src\RecipeDb.Mvc.Tests\RecipeDb.Mvc.Tests.csproj" (default target) (5) ->
  C:\a\src\src\RecipeDb.Mvc.Tests\RecipeDb.Mvc.Tests.csproj(144,5): error : 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=317567.

    0 Warning(s)
    2 Error(s)

Time Elapsed 00:00:09.21

所以我复制了他的构建日志,只是更改了Nuget.exe所在路径。Nuget.exe命令似乎正在运行,但显然没有下载包。当然,即使我删除了包目录,本地构建也能正常工作。


可能是重复的问题:此项目引用了在此计算机上缺失的NuGet包 - Malcolm
2个回答

4

对于我来说,与Microsoft.Bcl.Build和BeforeTargets="BeforeBuild"的相关引用导致了问题。当Microsoft.Bcl.Build作为Azure Nuget软件包的依赖项添加时,这个问题就出现了。 尝试检查您的项目文件并将其删除。

 <Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="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=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
  </Target>

对我来说也是一样的。我编辑了.csproj文件(多个项目),并删除了与Bcl相关的部分。问题解决了。 - jbarrameda
我们需要删除哪个文件以移除上述配置? - Ragavan Rajan
@RagavanRajan 好久不见了,但我认为您应该删除完整的<Import元素。 - AlignedDev

4

根据您发布的错误信息行中的link,我看到:

Nuget 2.7 中有以下改进:

改进

我们已经更新了 Microsoft.Bcl.Build 的使用方法。新版本将使用条件导入,类似于NuGet的自动导入功能。这将始终允许项目在Visual Studio中加载。

然而,Microsoft.Bcl.Build 还会向您的项目添加一个目标,在构建完成后运行。此目标检查当前构建是否还原了包,如果是,则以可操作的错误消息失败构建:

Package Restore Error

构建第二次将修复此错误。请注意,只有在缺少软件包时才会出现此错误,因此您不必总是构建两次。

要了解更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=317568

然而,在下面它说它不会处理构建服务器/持续集成(CI)场景,并且需要一个解决方案,如以下摘自文章的部分:
此解决方案不涉及构建服务器/持续集成(CI)场景。要在构建服务器上成功使用软件包还原,您有两个选择:
1. 检入.targets文件。 2. 明确运行NuGet软件包还原以在构建项目/解决方案之前。
希望你面临的问题也是因为这个。

1
@James,我认为这是一种赞美。我只是发布了链接中看起来有帮助解决问题的部分。在StackOverflow中,这是一种常见做法,因为链接内容可能会在未来被篡改,但即使如此,这些帖子也应该是有意义的。 - RinoTom
4
我建了两次构建都不行 :( 我得到了相同的错误两次: "C:\path\project.csproj" (default target) (4) -> (EnsureBclBuildImported target) -> C:\path\project.csproj(142,5): error : 此项目引用了在此计算机上缺失的NuGet包。启用NuGet程序包还原以下载它们。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=317567. - Maria Ines Parnisari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接