36

I'm having kind of an odd problem with my Team Foundation Service build. I queue it up and it starts just fine, but then it fails with the following error:

C:\a\src\Platform\Prod\Platform.Web\Platform.Web.csproj (436): 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.

So then I re-queue the build per the message/URL and...it happens again. I've Googled around but I can't seem to figure out what the issue is. I can build just fine in Visual Studio and the solution is configured for package restore. Any thoughts?

Thanks in advance.

4

10 回答 10

49

如果有人在 tfs 构建服务器上仍然遇到此问题,您需要执行以下操作:

  1. 确保您尝试构建的解决方案中的所有项目都具有最新的 Microsoft.Bcl.Build 包(只需在包管理器中更新它)。
  2. 构建失败后,查看生成此错误的所有项目(在 tfs 构建日志摘要中)(“构建恢复 NuGet 包 ...”)
  3. 打开每个项目的 .proj 文件并注释掉以 'Target Name="EnsureBclBuildImported"' 开头的整个目标元素
  4. 签入并重试构建

升级后似乎不知何故,并非所有项目都删除了那些旧的构建代码块并且它导致了问题(据我了解,在微软更改其 bcl 构建过程后不再需要它)。

于 2013-10-23T05:40:09.907 回答
17

此问题的解决方案在错误消息本身的链接中指定。

这是由于该页面中指定的改进而发生的:

改进

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

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

第二次构建将修复此错误。请注意,这个错误只会在缺少包的情况下出现,所以你不必总是构建两次。

然后它针对构建服务器/持续集成(CI)的情况指定如下:

此解决方案不解决构建服务器/持续集成 (CI) 方案。为了在构建服务器上成功使用包还原,您有两个选择:

  1. 签入 .targets 文件。
  2. 在构建项目/解决方案之前显式运行 NuGet 包还原。

因此,我认为对于您的问题解决方案,应遵循上述两个步骤。

于 2013-09-25T17:05:40.177 回答
7

我在 Xamarin 项目中看到了类似的问题,并且执行以下步骤解决了我的问题;

  1. 将项目模式设置为 Release and Rebuild All
  2. 将项目模式设置回调试并重建全部
  3. 问题排序。

奇怪但对我有用,希望它有帮助。

于 2016-12-13T11:46:40.330 回答
0

所需的 TFSBuild 目标文件必须包含在源代码管理中,或者必须在尝试构建解决方案之前还原 NuGet 包。

nuget.org上提供了有关如何执行此操作的详细信息。

它基本上涉及创建一个新的构建项目文件,该文件首先恢复包,然后构建您的解决方案。

于 2014-07-04T00:23:46.637 回答
0

只是在 TeamCity 而不是 TFS 上遇到了同样的问题。

我们在构建之前明确地恢复了包,但是一些项目仍然在 CI 服务器上出错。

我们能够在不破解 csproj 文件的情况下解决它。

BclBuildImported = True我们在恢复包后强制构建属性。csproj 文件中的恶意目标以未设置此属性为条件。

如果您可以在 TFS 中轻松设置此属性,则可能是一种更强大的解决方法。

于 2015-01-06T20:57:28.403 回答
0

我在一个 Web API 项目中遇到了这个问题,但我们使用的是 NAnt。

解决方案是将 Microsoft BCL Build Components nuget 包更新到最新版本(1.0.21),现在一切正常。

于 2015-06-12T21:29:36.443 回答
0

可以在这里找到正确的解决方案:https ://docs.microsoft.com/ru-ru/nuget/consume-packages/package-restore-troubleshooting

只需添加到 NuGet.Config:

<!-- Package restore is enabled -->
<configuration>
    <packageRestore>
        <add key="enabled" value="True" />
        <add key="automatic" value="True" />
    </packageRestore>
</configuration>
于 2019-05-23T17:38:14.607 回答
0

在记事本或任何其他编辑器中打开有问题的 csproj。检查目标 EnsureBclBuildImported 在 csproj 中是否可用。如果是这样,请注释掉目标内的第二个错误条件,即使包可用,也会导致构建失败(无论包是否可用,它都会使构建失败!)。

<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">

<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14 \tools\Microsoft.Bcl.Build.targets')" Text="此项目引用此计算机上缺少的 NuGet 包。启用 NuGet 包还原以下载它们。有关详细信息,请参阅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="构建恢复的 NuGet 包. 再次构建项目以在构建中包含这些包。 ." HelpKeyword="BCLBUILD2002" />
</Target>

于 2015-12-09T11:27:49.757 回答
0

问题故事:

就我而言,我的一位队友使用了VisualStudio 2017。在那里,我们通过使用postsharp等手编写版本,从项目文件中降级了一些 nuget 包。它已经在那里解决了,他将更新的代码推送到gitlab。在我这边,我已将 gitlab 中的代码汇集到我的本地存储库中,并且我已使用 VisualStudio 2019 打开它,我遇到了这个错误

解决方案:

1-我已经从我更新的本地存储库中使用 VisualStudio 2017 打开了代码并用它重建了它。

2-我已关闭 VisualStudio 2017 并使用VisualStudio 2019重新打开。这次rebuild成功了

对于所有遇到过的人

于 2019-05-15T09:01:00.643 回答
0

我必须在构建脚本的干净目标之前恢复包。我错误地认为在构建之前恢复包就足够了。

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

    <Target Name='RestorePackages'>
        <Exec Command='tools\NuGet.exe Restore "Web.sln"'/>
    </Target>

    <!--
        must call RestorePackages prior to clean to avoid error the following error
        "The build restored NuGet packages. Build the project again to include these packages in the build."
        -->
    <Target Name='Clean' DependsOnTargets='RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Clean' Properties='Configuration=Release'/>
    </Target>

    <Target Name='Build' DependsOnTargets='Clean;RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Build' Properties='Configuration=Release'/>
    </Target>

</Project>
于 2017-03-14T23:09:36.177 回答