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


165

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

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

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

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

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

何が欠けていますか?この問題をどのように診断できますか?


出力ログでnuget.exeがトリガーされているのがわかりますか?
プラナフ2012年

そして重要なことに、出力ログにエラーが表示されていますか?
maartenba 2012年

回答:


272

nugetパッケージマネージャーコンソールで次のコマンドを実行すると、パッケージの復元を強制的に実行できます。

アップデートパッケージ-再インストール

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


Update-Package -Reinstall -ProjectName myProj

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

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

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

アップデートパッケージ-再インストール-安全


7
@ NightOwl888は、DLLヘルバインディングの問題が常に発生していて、運が良かったのですが、再インストールして運が悪かった場合を除いて、それを実行する方法がないため、報告する必要があるように聞こえます。
Chris Marisic 2013

4
@nightowlソース管理を使用している場合、変更を元に戻すのはそれほど難しくありません。
ErikE 2014年

4
ここでの主な欠点は、パッケージのバージョンが維持されないため、最新のパッケージバージョンがインストールされることです。あなたのプロジェクトは、新しいバージョンと互換性がありません場合、これは問題になる可能性があります...
JDandChips

4
うん、アップデートパッケージ-再インストールは私のために働いた。IDEがなぜそれを行わないのか私にはわかりません。すべてが正しく設定されています。Ugghh、私は誓います、NuGetは良い面と迷惑な面の両方です。
ジェレミーレイブラウン

2
回答の最後に「重要!これによりプロジェクトが破壊される可能性があります」を追加していただきありがとうございます。
devman 2017

25

この投稿を見つけた人は、こちらを読んでください。

NuGet 2.7以降では、自動パッケージ復元が導入されました。これは、MSBuildプロセスを改ざんしないため、ほとんどのアプリケーションにとってはるかに優れたアプローチと見なされています。頭痛が少ない。

あなたを始めるためのいくつかのリンク:


2
NuGetの現在のバージョンに適切な回答をありがとうございます。
エリックJ.

20

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

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

Update-Package –reinstall <packageName>

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

Update-Package –reinstall <packageName> -ignoreDependencies

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

Update-Package –reinstall <packageName> <projectName>

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

Update-Package -reinstall -ProjectName <projectName>

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

Update-Package -reinstall 

私の問題を早急に汚して解決しました。
blackorchid

20

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

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


元のリンクは無効です。これは置き換えになる可能性があります:https : //github.com/NuGet/Home/issues/1968


3
リンクをありがとう。パッケージ/バイナリが不足しているプロジェクトでパッケージ復元モードを有効にするのが一般的です。あなたがパッケージを持っていない場合、それはあなたがそれらを入手したいときです。ユースケースは失敗します。
アンソニー

2
「パッケージが不足しているプロジェクトでパッケージ復元モードを有効にする」と言うとき、どういう意味ですか?そのために実行する必要があるコンソールコマンドはありますか?
CodeWarrior

90
NuGetは毎日私に失敗し、私はそれを完全に軽蔑しています。
ジャマー2013年

14

VS 2017

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


ソース管理外のソリューション(DevOps / GitでVisual Studio Team Explorerを使用して管理)をチェックすると、参照が欠落しているためにビルドできず、パッケージの復元は何もしませんでした。このソリューションは、この状況に適切なソリューションでした。
PJRobot

12

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

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

参照が欠落していると主張してエラーが発生します。ローカルビルドディレクトリとTFSサーバーの両方を調べると、/ packagesフォルダーが作成されておらず、nugetパッケージがコピーされていないことがわかります。Alexandreの回答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によって実行されているコマンドを示すのに役立ちます。これが、一時的にターゲットファイルをハッキングするきっかけになりました。


二重引用符の問題があり、あなたが行ったのと同じ編集を行わなければなりませんでした。とてもイライラします!
グレッグ

5

他に何もうまくいかない場合は、以下を試してください。

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

私のために働いて、それを試すのは簡単です。


2
これでうまくいきました。ステップ3では、パッケージを手動で復元する必要はありませんでした。プロジェクトを開くと、パッケージは自動的に復元されました。
Tawab Wakil

5

他の回答がどれもうまくいかない場合は、次のことを試してみてください。

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

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

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

Update-Package -reinstall

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


これは私を完全に狂わせることから救いました。ありがとう!
Jeff Hay

4

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


4

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

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

理想的には、いくつかの有効なGUIDを含める必要があります。

上記のタグを削除すると、「Restore Nugets」が機能しました。


1

奇妙なことが起こり、Visual Studioを使用して自動的に復元できない場合があります。その場合は、NuGet Package Manager Consoleを使用できます。Visual Studio内の[ツール]-> [NuGetパッケージマネージャー]-> [パッケージマネージャーコンソール]から開きます。コンソール内のコマンドは単純です。また、コマンドの入力中にコンテキストヘルプを表示するには、ボタンを押すだけで、入力している文字で始まるすべてのオプションが表示されます。したがって、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
あなたの1番目のポイントに関して、あなたが提供するリンクはあなたのアドバイスと矛盾します:「TFSを使用している場合1.ソリューションの.nugetフォルダーからNuGet.exeおよびNuGet.targetsファイルを削除します2.バイパスを続けるにはNuGet.Configファイルを保持しますソース管理にパッケージを追加しています。」
Andrew Dennison、2016

1

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


1

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


1

他の解決策はどれも私の状況では機能しませんでした:

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

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

それでも問題が解決しない場合は、繰り返しますが、Windowsエクスプローラーでドライブを検索して、nuget見栄えの悪いものをすべて削除します。


0

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

  1. フォルダー.nugetを追加し、ファイルNuGet.ConfigおよびNuGet.targetsをDirectory .nugetに追加します。

  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>

これは古いやり方です。@davenewzaの回答と、blog.davidebbo.com
2014/01 /

0

私がそうであったように、直面しているエラーが「リモートサーバーに接続できません」である場合は、上記のコメントで提供されているチェックに加えて、このチェックも行うと便利です。

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

パッケージソースをダウンロードするように変更すると、問題が発生しました:https : //www.nuget.org/api/v2/ EXPLICTLY設定


0

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


0

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

  1. パッケージフォルダを削除します(存在する場合)

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

    • nuget.exeの完全パスを貼り付けます。.slnファイルの完全パスを復元します。
  3. 不足している参照でビルドが成功しなかった場合は、Install-pacakgeコマンドを使用します。それがお役に立てば幸い(HIH)

0

VS2017で、ソリューションを右クリック=>コマンドラインを開く=>開発者コマンドライン。

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

dotnet restore

これですべて/すべてのパッケージが復元され、何が行われたかを示すコンソール出力が表示されます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.