web-dev-qa-db-ja.com

NuGetがビルド時にパッケージを復元しない

新しいマシンにワークスペースを作成し、TFSからプロジェクトの最新情報を取得し、NuGet Restoreを有効にして、次の(簡略化した)出力を取得しました。

1>------ Rebuild All started: Project: Caching, Configuration: Debug Any CPU ------
1>  Restoring NuGet packages...
1>  To prevent NuGet from downloading packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages'.
1>  All packages listed in packages.config are already installed.
1>  Caching Framework -> C:\MyProjLocation\Caching\bin\Debug\Caching.dll
2>------ Rebuild All started: Project: Library, Configuration: Debug Any CPU ------
2>C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5): warning MSB3245: Could not resolve this reference. Could not locate the Assembly "LumenWorks.Framework.IO". Check to make sure the Assembly exists on disk. If this reference is required by your code, you may get compilation errors.
2>C:\MyProjLocation\Library\SomeClass.cs(2,7,2,17): error CS0246: The type or namespace name 'LumenWorks' could not be found (are you missing a using directive or an Assembly reference?)

========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========

NuGetパッケージはどれも復元されませんでした(10個以上あります-読みやすくするために上記の出力から削除しました)。

NuGetは2番目のプロジェクト(ライブラリ)のパッケージを復元しようとしてさえいないようです。

NuGetターゲットインポートをLibrary.csprojファイルのCSharpターゲットインポートの下に移動しようとしましたが、 ここで述べたように ですが、まだ機能していません。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

Visual Studio 2013でNuGetの最新バージョン(2.7.41101.371)を実行しています。

編集:packages.configが存在し、NuGetパッケージマネージャーに正しいパッケージでチェックされたライブラリプロジェクトがあります。

22
Dave New

NuGet.targetsファイルもディスクから削除しましたか?

NuGet.tagetsファイルがある場合、Visual Studio/NuGet.exeはMSBuildパッケージの復元を試みます。

詳細については、 this doc を参照してください。

11
Kevin Kuszyk

NuGetが不足しているパッケージを復元する前に、ソース管理に移動し、パッケージフォルダー内のすべてのファイル(repositories.configを除く)を削除する必要がありました。これは、パッケージをソース管理にチェックインするのではなく、パッケージの復元を使用しているという考え方です。ソース管理にパッケージが表示される場合、それらはダウンロードされません。

19
Chris M.

ローカルマシンでも同じ問題があります。パッケージマネージャーコンソールとnuget.exe restore MySolution.slnすべてがインストールされたことを報告します。ソリューションディレクトリにpackagesフォルダーがなく、パッケージへの参照が解決されていません。

すべてのプロジェクトファイルをチェックしましたが、パッケージは..\packagesフォルダー、ソリューションファイル自体が配置されているフォルダー。

私がそれを機能させた方法は、実行することです:

nuget.exe restore MySolution.sln -PackagesDirectory packages

これにより、nuget.exeは指定されたフォルダーにすべてのパッケージをダウンロードし、すべての参照が復元されました。

NuGet 2.7以降では、ターゲットファイルはサポートされていないことに注意してください。msbuildはパッケージを復元するための統合された方法を使用すると想定していますが、非常に頻繁に失敗します。

実際、私自身の仕事では Paket を使用することを好みます。慣れると、alwaysが機能します。また、ターゲットファイルと、NuGetパッケージを作成する素敵な方法もサポートしています。

6
Alexey Zimarev

この背後にある科学についてはわかりませんが、ダウンロードしたばかりのVisual Studioプロジェクトをビルドして、いくつかのMSB3245警告とそれに続く参照の欠落によるビルドの失敗:

  1. Visual Studioで、不足しているNuGet参照があるプロジェクトを右クリックし、[NuGetパッケージの管理...]を選択します。
  2. [NuGetパッケージの管理]ダイアログが開きます。また、「NuGetパッケージを復元しています...」の行に沿ってテキストが表示され、すぐにメッセージが表示されてから自動的に閉じるのを見ました。
  3. [NuGetパッケージの管理]ダイアログを閉じて(実際にダイアログを変更せずに)、ビルドを再試行します。

編集: TimeSnapper 自動スクリーンショット履歴に戻ります(そのツールとの関係はありません-私は単なるファンです)、NuGetの管理の上部にもメッセージが表示されたようですパッケージと「復元」ボタン:「このソリューションにはNuGetパッケージがありません。クリックしてオンラインパッケージソースから復元します。」

enter image description here

「復元」は私にとっては自動的に行われたように見えますが、そのボタンを手動でクリックすると、パッケージが見つからないという問題を解決するためのトリックが実行される場合があります。

6
Jon Schneider

Nugetパッケージをアンインストールして、正しくインストールするために更新インストールを行う必要がありました。これは、同じ問題に直面しているあなたの一部を助けるかもしれません