36

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 で問題なくビルドでき、ソリューションはパッケージの復元用に構成されています。何かご意見は?

前もって感謝します。

4

10 に答える 10

17

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

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

改善

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

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

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

次に、ビルド サーバー/継続的インテグレーション (CI) の場合、次のように指定します。

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

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

したがって、問題を解決するには、上記の 2 つの手順に従う必要があると思います。

于 2013-09-25T17:05:40.177 に答える
7

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

  1. プロジェクト モードを [Release and Rebuild All] に設定します
  2. プロジェクト モードを [Debug and Rebuild All] に戻します。
  3. 問題が分類されました。

奇妙ですが、私にとってはうまくいきました。

于 2016-12-13T11:46:40.330 に答える
0

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

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

csproj ファイルをハッキングせずに解決できました。

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

このプロパティを TFS で簡単に設定できる場合は、より堅牢な方法になる可能性があります。

于 2015-01-06T20:57:28.403 に答える
0

問題のある csproj をメモ帳またはその他のエディターで開きます。csproj でターゲットの EnsureBclBuildImported が使用可能かどうかを確認します。その場合は、ターゲット内の 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 パッケージを参照しています。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

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

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

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

于 2014-07-04T00:23:46.637 に答える
0

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

解決策は、Microsoft BCL Build Components nuget パッケージを最新 (1.0.21) に更新することでした。これで問題なくビルドできるようになりました。

于 2015-06-12T21:29:36.443 に答える