web-dev-qa-db-ja.com

NuGetパッケージの復元が機能しない

あるコンピューターでプロジェクトをチェックインし、別のコンピューターでチェックアウトしたところ、NuGetによってインストールされたバイナリーが見つからないことがわかりました。ソース管理にもチェックインできましたが、より良い解決策があるようです。

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

私はそれらの指示に従いましたが、今では.nugetフォルダーがあり、.csprojファイルに次のエントリがあります:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

それでも、ソリューションを再構築しても、不足しているパッケージは復元されません。

私は何が欠けていますか?この問題を診断するにはどうすればよいですか?

151
Eric J.

Nugetパッケージマネージャーコンソールで次のコマンドを実行すると、パッケージの復元を強制的に実行できることに注意してください。

更新パッケージ-再インストール

ソリューション内のすべてを強制的に再インストールします。


更新パッケージ-再インストール-ProjectName myProj

MyProjプロジェクトのすべてを強制的に再インストールします。

:これは核オプションです。このコマンドを使用すると、インストールしたパッケージと同じバージョンを取得できない場合があり、問題が発生する可能性があります。これは、ソリューションレベルではなくプロジェクトレベルで発生する可能性が低くなります。

-safeコマンドラインパラメータオプションを使用して、同じメジャーバージョンとマイナーバージョンのコンポーネントを使用して、新しいバージョンへのアップグレードを制限できます。このオプションは後で追加され、コメントに記載されている問題の一部を解決します。

更新パッケージ-再インストール-安全

250
Chris Marisic

この投稿に出くわした人は、これを読んでください。

NuGet 2.7+では、Automatic Package Restoreを紹介しました。これは、MSBuildプロセスを変更しないため、ほとんどのアプリケーションにとってはるかに優れたアプローチであると考えられています。頭痛が少ない。

開始するためのリンク:

24
Dave New

不足しているパッケージ/バイナリがあるプロジェクトでパッケージ復元モードを有効にしましたか?復元モードを有効にするときにパッケージを正しくインストールする必要があるという既知の問題があります。

http://nuget.codeplex.com/workitem/1879


元のリンクは無効です。これは代替品かもしれません: https://github.com/NuGet/Home/issues/1968

20
Alexandre Dion

次のいずれかの方法を選択する必要があります。

すべてのソリューションのプロジェクトで、名前でパッケージを再インストールします。

Update-Package –reinstall <packageName>

パッケージを名前で再インストールし、すべてのソリューションのプロジェクトの依存関係を無視します。

Update-Package –reinstall <packageName> -ignoreDependencies

プロジェクト内の名前でパッケージを再インストールする:

Update-Package –reinstall <packageName> <projectName>

特定のプロジェクトのすべてのパッケージを再インストールします。

Update-Package -reinstall -ProjectName <projectName>

ソリューション内のすべてのパッケージを再インストールします。

Update-Package -reinstall 
19
Mohammad Dayyan

2つのシナリオでこの問題に遭遇しました。

まず、msbuild.exeを使用してコマンドラインからソリューションをビルドしようとしています。第二に、TFSとCIを使用してビルドサーバーでslnとそれを含むプロジェクトをビルドしようとすると。

参照が欠落しているというエラーが表示されます。ローカルビルドディレクトリとTFSサーバーの両方を調べると、/ packagesフォルダーが作成されておらず、nugetパッケージがコピーされていないことがわかります。アレクサンドルの答えに記載されている指示に従うと http://nuget.codeplex.com/workitem/1879 もうまくいきませんでした。

VS2010を介してパッケージの復元を有効にし、VS2010内からのみビルドが機能するのを見てきました。繰り返しますが、msbuildの使用は失敗します。私の回避策はおそらく完全に無効ですが、私の環境では、コマンドラインビルドとTFSのCIビルドからすべてが機能します。

。\ nugetに移動して、.nuget\NuGet.targetsファイルの次の行を変更しました。

から:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

to:(注意、変数を引用符なしで)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

ディレクトリにスペースが含まれる場合、これは失敗しますが、ディレクトリにスペースがないため、この回避策によりビルドが正常に完了することを理解しています...当分の間。

ビルドで診断レベルのログを有効にすると、msbuildによって実行されているコマンドを表示するのに役立ちます。これが、ターゲットファイルを一時的にハッキングするようになった理由です。

12
PerryM

VS 2017

[ツール]> [NuGetパッケージマネージャー]> [パッケージマネージャーの設定]> [全般] [すべてのNuGetキャッシュをクリア]をクリックします。

11
Niaz Morshed

他に何かがうまくいかなかった場合、試してください:

  1. プロジェクトを閉じます。
  2. ソリューションフォルダー内のパッケージフォルダーを削除します。
  3. Projectを再度開き、Nuggetパッケージを再度復元します。

私のために働いたので、試してみるのは簡単です。

5
Loaderon

この問題が発生する可能性のある他の人のために、Visual Studioを閉じてプロジェクトを再度開くことで問題を解決できました。プロジェクトがロードされると、パッケージは初期化段階で復元されました。

3
Mike Perrenoud

私にとっては、.csprojにNuGetPackageImportStampという空のタグがありました

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

理想的には、有効なGUIDが含まれている必要があります。

上記のタグを削除してから、「Nugetsの復元」が機能しました。

3
anu

他の回答のどれもあなたのために働かない場合、私のために働いた唯一のものだった次を試みなさい:

.csprojファイルを見つけて、テキストエディターで編集します。

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">ファイルで.csprojタグを見つけて、ブロック全体を削除します。

ソリューション内のすべてのパッケージを再インストールします。

Update-Package -reinstall

この後、ナゲットパッケージを復元する必要があります。これは、プロジェクトを別の場所に移動した場合にのみ発生するフリンジケースである可能性があります。

3
Jako Basson

新しいプロジェクトをゼロから作成し、すべてのソースファイルをコードとともにインポートするのに最も適した回避策です。私のプロジェクトはそれほど複雑ではなかったので、そこから問題はありませんでした。

1
Martin Deivid

システムでシステムの復元を行った後、NuGetパッケージが破損し、約2日間バックアップしました。 (その間にNuGetパッケージがインストールされていました。)修正するには、ユーザープロファイルの.nuget\packagesフォルダーに移動し、パッケージを見つけて削除する必要がありました。その場合にのみ、Visual Studioはパッケージを最新の状態にプルダウンし、参照として適切に追加します。

1
Aaron

奇妙なことが起こり、Visual Studioを使用して自動的に復元できないことがあります。その場合、NuGetパッケージマネージャーコンソールを使用できます。 ツール-> NuGetパッケージマネージャー->パッケージマネージャーコンソールからVisual Studio内で開きます。コンソール内のコマンドは簡単です。コマンドの入力中にコンテキストヘルプを表示するには、ボタンを押すだけで、入力している文字で始まるすべてのオプションが表示されます。そのため、log4netなどのパッケージがインストールされていない場合、次のコマンドを入力します。

インストールパッケージlog4net

インストールするバージョンの指定、パッケージの更新、パッケージのアンインストールなど、さらに多くのことができます。

Visual Studioが変人のように振る舞ったときに、コンソールを使用して手伝わなければなりませんでした。

1

次のいずれかの理由でパッケージの自動復元が失敗します:

  1. ソリューションの.nugetフォルダー(ソリューションルートフォルダーにあります)からNuGet.exeおよびNuGet.targetsファイルを削除しなかった
  2. [ツール] >> [オプション] >> [Nugetパッケージマネージャー] >> [一般設定]から自動パッケージ復元を有効にしませんでした。
  3. すべてのプロジェクトからNuget.targetsファイルへの参照を手動で削除するのを忘れた
  4. Visual Studioを再起動する必要があります(再起動する前に、タスクマネージャーからプロセスが強制終了されていることを確認してください)。

次の記事では、ポイント1〜3について詳しく説明しています。 https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore

1
CShark

私の状況では他のソリューションはどれもうまくいきませんでした:

AspNetCore依存関係がインストール/アンインストールされ、キャッシュされていました。 「AspNetCore.All」は、適切に更新/再インストール/削除することを拒否します。そして、私が何をしたかに関係なく、キャッシュされた依存関係を使用します(互換性がなかったため)。

  1. すべてをバックアップします。再インストールする必要がある依存関係のリストに注意し、VisualStudioを終了します
  2. テキストエディタですべての.projファイルを開き、すべてのPackageReferenceを削除します
  3. 各プロジェクトで、binobjフォルダーを削除します
  4. ソリューションで見つかった「パッケージ」フォルダーを削除します。
  5. ソリューションを開き、Tools > Nuget Package Manager > Package Manager SettingsおよびClear all Nuget cachesに移動します。一部のアイテムの削除に失敗する可能性があるため、コンソールを確認します-フォルダーパスをコピーして、Visual Studioを終了します。
  6. そのフォルダーから何かを削除しますソリューションを再度開き、最初から再度nugetパッケージのインストールを開始します。

それでもうまくいかない場合は、繰り返しますが、Windowsエクスプローラーでドライブでnugetを検索し、キャッシュのように見えるものをすべて削除します。

0
jv_

vs2015 no nuget復元の問題を有効にしません。私の解決策:

  1. フォルダ.nugetを追加し、ディレクトリ.nugetにファイルNuGet.ConfigおよびNuGet.targetsを追加します

  2. 各プロジェクトファイルの追加:ビルド

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>
0
方权军

私の場合、中止されたNugetの復元試行により、ソリューション内のpackages.configfilesの1つが破損していました。 git作業ツリーをチェックする前に、これを発見しませんでした。ファイルの変更を元に戻した後、Nugetの復元は再び機能していました。

VS2017で、ソリューション=> Open CommandLine => Developer Command Lineを右クリックします。

開いたら、入力します(その後Enterを押します)

dotnet restore

これにより、すべて/すべてのパッケージが復元され、実行内容の素敵なコンソール出力が得られます...

0
James Joyce

Nugetを機能させるショートカットがあります。1。インターネット接続またはNugetのURLがVS Toolsオプションメニューで適切であることを確認します。2.ソリューションの.nugetまたはnugetフォルダーを確認します。

  1. パッケージフォルダーが存在する場合は削除

  2. パッケージマネージャーコンソールを開き、このコマンドを実行します

    • nuget.exeのフルパスを貼り付けます.slnファイルのフルパスを復元します!
  3. ビルドが見つからない参照を取得できなかった場合は、Install-pacakgeコマンドを使用します。希望する(HIH)
0
HydTechie

私が直面しているエラーが「リモートサーバーに接続できない」場合は、上記のコメントで提供されているチェックに加えて、このチェックを行うことも有益です。

パッケージをダウンロードできるNUGETパッケージソースが2つあることがわかりました([ツール]-> [Nugetパッケージマネージャー]-> [パッケージマネージャーの設定]内)。パッケージソースの1つが機能しておらず、Nugetはそのソースからのみダウンロードしようとしていました。

ダウンロードするためにパッケージソースを変更すると、次のようになりました: https://www.nuget.org/api/v2/ 設定で明示的に

0
vamsee