web-dev-qa-db-ja.com

NuGetパッケージの復元でTeam Foundation Serviceのビルドが失敗する

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ごとにビルドをキューに再配置します...私はグーグルで調べましたが、問題が何であるかを理解できないようです。 Visual Studioで問題なくビルドでき、ソリューションはパッケージの復元用に構成されています。何かご意見は?

前もって感謝します。

33
benjy

これに対する解決策は、エラーメッセージ自体の link で指定されています。

これは、そのページで指定されている改善のために発生しています。

改善点

Microsoft.Bcl.Buildを更新して、別のアプローチを使用しました。新しいバージョンでは、NuGetの自動インポート機能と同様の条件付きインポートが使用されます。これにより、プロジェクトは常にVisual Studioに読み込まれます。

ただし、Microsoft.Bcl.Buildは、ビルドが完了した後に実行されるターゲットをプロジェクトに追加します。このターゲットは、現在のビルドがパッケージを復元したかどうかをチェックし、復元された場合、アクション可能なエラーメッセージでビルドを失敗させます。

もう一度ビルドすると、このエラーが修正されます。このエラーは、パッケージが欠落している場合にのみ表示されるため、常に2回ビルドする必要があるわけではないことに注意してください。

次に、サーバーの構築/継続的統合(CI)の場合、以下のように指定します。

このソリューションは、ビルドサーバー/継続的統合(CI)シナリオには対応していません。ビルドサーバーでパッケージの復元を正常に使用するには、2つのオプションがあります。

  1. .targetsファイルをチェックインします。
  2. プロジェクト/ソリューションをビルドする前に、NuGetパッケージの復元を明示的に実行します。

したがって、問題の解決のためには、上記の2つの手順に従う必要があります。

17
RinoTom

Tfsビルドサーバーでまだこの問題が発生している場合は、次の手順を実行する必要があります。

  1. ビルドしようとするソリューション内のすべてのプロジェクトが最新のMicrosoft.Bcl.Buildパッケージを持っていることを確認してください(パッケージマネージャーで更新するだけです)。
  2. ビルドが失敗した後、このエラーを生成するすべてのプロジェクト(tfsビルドログの概要)を確認します(「ビルドはNuGetパッケージを復元しました...」)
  3. それらのプロジェクトの各.projファイルを開き、「Target Name = "EnsureBclBuildImported"」で始まるターゲット要素全体をコメントアウトします
  4. チェックインしてビルドを再試行します

アップグレード後、すべてのプロジェクトがビルドコードの古いブロックを削除するわけではなく、問題を引き起こしているようです(Microsoftがbclビルドプロセスを変更した後、それはもはや必要ないことを理解しています)。

49
Michael Logutov

Xamarinプロジェクトで同様の問題を確認しましたが、次の手順を実行すると問題が解決しました。

  1. プロジェクトモードを[すべて解放して再構築]に設定する
  2. プロジェクトモードをデバッグとすべて再構築に戻す
  3. 問題がソートされました。

奇妙ですが、私のために働いた、それが役立つことを願っています。

4
Nurhak Kaya

Web APIプロジェクトでこの問題に遭遇しましたが、NAntを使用しています。

解決策は、Microsoft BCL Build Components nugetパッケージを最新(1.0.21)に更新することで、現在は問題なくビルドされています。

0
GotDibbs

適切な解決策は次の場所にあります。 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>
0
Yevheniy Potupa

TFSではなくTeamCityで同じ問題が発生しました。

ビルドする前にパッケージを明示的に復元していますが、CIサーバーでまだエラーが発生しているプロジェクトもあります。

Csprojファイルをハッキングすることなく解決できました。

ビルドプロパティBclBuildImported = Trueパッケージを復元した後。 csprojファイル内の不正なターゲットは、このプロパティが設定されていないことを条件としています。

このプロパティをTFSで簡単に設定できれば、より堅牢な方法になります。

0
lesscode

ソリューションをビルドする前に、必要なTFSBuildターゲットファイルをソース管理に含めるか、NuGetパッケージを復元する必要があります。

これを行う方法の詳細は nuget.org で提供されています。

基本的には、最初にパッケージを復元してからソリューションをビルドする新しいビルドプロジェクトファイルを作成します。

0
Scott Munro

ビルドスクリプトのクリーンターゲットの前にパッケージを復元する必要がありました。ビルドする前にパッケージを復元するだけで十分だと思いました。

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

問題のcsprojをメモ帳またはその他のエディターで開きます。ターゲットのEnsureBclBuildImportedがcsprojで使用可能かどうかを確認します。その場合、パッケージが使用可能であってもビルドが失敗するように指示するターゲット内の2番目のエラー条件をコメントアウトします(パッケージが使用可能かどうかに関係なくビルドが失敗するなど)。

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

<Error Condition = "!Exists( '..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text = "このプロジェクトはNuGetパッケージを参照しています( s)このコンピューターにありません。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 = "The buildはNuGetパッケージを復元しました。プロジェクトを再度ビルドして組み込みますビルド内のこれらのパッケージ。詳細については、 http://go.Microsoft.com/fwlink/?LinkID=317568 を参照してください。 HelpKeyword = "BCLBUILD2002" />
</ Target>

0
Saurabh Jha

問題のストーリー:

私の場合、チームメイトの1人がVisualStudio 2017を使用しています。そこで、postsharpなどのような手でバージョンを書くことによって、プロジェクトファイルからいくつかのnugetパッケージをダウングレードしました。そこで動作し、更新されたコードをgitlabにプッシュしました。私の側では、gitlabからローカルリポジトリにコードをプールし、VisualStudio 2019でそれを開いて、このエラーを受け取ります

解決策:

1-​​=更新されたローカルリポジトリからVisualStudio 2017でコードを開き、それで再構築しました。

2- VisualStudio 2017を閉じ、VisualStudio 2019で再度開きました。今回は再構築に成功しました

直面したすべての人のために

0
Hamit YILDIRIM