繁体   English   中英

NuGet包还原时Team Foundation Service构建失败

[英]Team Foundation Service build fails on NuGet package restore

我的Team Foundation Service构建遇到了一个奇怪的问题。 我把它排队并且它开始很好,但随后它失败并出现以下错误:

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.

然后我按照消息/ URL对构建重新排队,然后......再次发生。 我用Google搜索过,但我似乎无法弄清问题是什么。 我可以在Visual Studio中构建得很好,并且该解决方案已配置为包还原。 有什么想法吗?

提前致谢。

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

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

在升级之后,不是所有的项目似乎都会删除那些旧的构建代码块并且它会导致问题(据我所知,在Microsoft更改了他们的bcl构建过程之后不再需要它)。

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

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

改进

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

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

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

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

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

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

所以,我想你的问题解决方案应该遵循以上两个步骤。

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

  1. 将项目模式设置为Release and Rebuild All
  2. 将项目模式设置回Debug和Rebuild All
  3. 问题排序。

很奇怪,但为我工作,希望它有所帮助。

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

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

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

刚与TeamCity有相同的问题,而不是TFS。

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

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

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

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

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

解决方案是将Microsoft BCL Build Components nuget包更新到最新版本(1.0.21)并且现在可以正常构建。

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

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

<错误条件=“!存在('.. \\ packages \\ Microsoft.Bcl.Build.1.0.14 \\ tools \\ Microsoft.Bcl.Build.targets')”Text =“此项目引用缺少的NuGet包在此计算机上。启用NuGet Package Restore以下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=317567 。“ HelpKeyword =“BCLBUILD2001”/>

<错误条件=“存在('.. \\ packages \\ Microsoft.Bcl.Build.1.0.14 \\ tools \\ Microsoft.Bcl.Build.targets')”Text =“构建恢复NuGet包。再次构建项目以包括这些包在构建中。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=317568 。“ HelpKeyword =“BCLBUILD2002”/>
</目标>

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

<?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>

问题故事:

在我的情况下,我的一个队友使用了VisualStudio 2017 我们已经通过像postsharp等手写版本来从项目文件中降级一些nuget包。它已经在那里工作,他将更新的代码推送到gitlab 在我这边我已经将代码从gitlab汇集到我的本地仓库,我用VisualStudio 2019打开它,我接受了这个错误

解:

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

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

对于所有面对的人

可在此处找到正确的解决方案: 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM