187

Visual Studio 2012 にソリューションとプロジェクトがあります。

packages.configプロジェクトには、プロジェクトのルートにファイルがあります。

この質問の目的のためにReferences、プロジェクトのセクションからこれらのライブラリを誤って削除したと仮定しましょう。

NuGet パッケージ マネージャーに移動すると、インターフェイスはこれらのパッケージの横にまだチェックマークを報告しており、それらがインストールされていることを示しています。

この状況を修正する方法を確認できる唯一の方法は、からすべてのエントリを削除することですpackages.config。これにより、NuGet インターフェイスがインストール済みとして報告する問題を修正し、それぞれを再度追加します。

よりスマートな方法はありますか?「不足しているパッケージを復元できるようにする」を有効にすることでこれが解決することを期待していましたが、何もしていないようです。

4

13 に答える 13

337

パッケージを再インストールしてみてください

NuGet パッケージ マネージャー コンソールで、次のコマンドを入力します。

Update-Package -Reinstall -ProjectName Your.Project.Name

パッケージを再インストールし、ソリューション全体の参照を復元する場合は、-ProjectNameパラメーターを省略します。

于 2013-03-08T22:57:00.467 に答える
45

不足しているパッケージの復元を機能させるには、VSソリューションレベルでNuGetパッケージの復元を有効にする必要があります。

ここに画像の説明を入力してください

于 2012-11-06T09:56:43.280 に答える
8

次のスクリプトは、パッケージ マネージャー コンソール ウィンドウで実行でき、再インストールする前に、ソリューション内の各プロジェクトからすべてのパッケージを削除します。

foreach ($project in Get-Project -All) { 
    $packages = Get-Package -ProjectName $project.ProjectName
    foreach ($package in $packages) {
        Uninstall-Package $package.Id -Force -ProjectName $project.ProjectName
    }
    foreach ($package in $packages) {
        Install-Package $package.Id -ProjectName $project.ProjectName -Version $package.Version
    }
}

これにより、すべてのパッケージのインストール スクリプトが再度実行され、欠落しているアセンブリ参照が復元されます。残念ながら、ファイルの作成や構成の変更など、インストール スクリプトが実行できる他のすべての操作も同様に行われます。おそらく、クリーンな作業コピーから始めて、SCM ツールを使用して、プロジェクト内で保持する変更と無視する変更を選択することをお勧めします。

于 2013-01-22T20:39:20.780 に答える
4

このスクリプトは、依存関係を台無しにしたり、意図的に削除された可能性のある依存関係をインストールしたりすることなく、プロジェクトのすべてのパッケージを再インストールします。(一部のパッケージ開発者向けの詳細。)

Update-Package -Reinstall -ProjectName Proteus.Package.LinkedContent -IgnoreDependencies
于 2016-06-02T17:28:47.187 に答える
1

jmfenollによる非常に人気のある回答が完全ではないという@Juriに同意する必要があります。参照が壊れている場合は、ほとんどの場合、最新のパッケージに更新するのではなく、たまたま使用している現在のバージョンへの参照のみを修正することをお勧めします。そして、Juriはまさにそれを行うための便利な機能を提供しました。Sync-References

しかし、もう少し先に進んで、プロジェクトだけでなくパッケージでも柔軟にフィルタリングできます。

function Sync-References([string]$PackageId, [string]$ProjectName) {
    get-project -all | 
    Where-Object { $_.name -match $ProjectName } |
    ForEach-Object {
        $proj = $_ ;
        Write-Output ('Project: ' + $proj.name)
        Get-Package -project $proj.name |
        Where-Object { $_.id -match $PackageId } |
        ForEach-Object { 
            Write-Output ('Package: ' + $_.id)
            uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force
            install-package -projectname $proj.name -id $_.id -version $_.version
        }
    }
}
于 2016-09-17T03:24:34.697 に答える
1

誰かに役立つ場合に備えて-私のシナリオでは、いくつかの共有ライブラリ(独自のTFSプロジェクト/ソリューションを持つ)がすべて1つのソリューションに結合されています。

Nuget はプロジェクトを正常に復元しますが、DLL は失われます。

根本的な問題は、ソリューションに独自のパッケージ フォルダーがあり、そのフォルダーに正しく復元されているにもかかわらず、プロジェクト ファイル (.csproj など) が、パッケージがダウンロードされていない別のプロジェクトを参照していることです。ファイルをテキスト エディターで開き、参照元を確認します。

これは、相互にリンクされたさまざまな共有ソリューションでパッケージを管理するときに発生する可能性があります。おそらく、すべての DLL が同じレベルにあることを確認したいので、これを最上位に設定することができます。これは、参照される DLL に対して完全に異なるソリューションを検索する場合があることを意味します。そのため、すべてのプロジェクト/ソリューションをダウンロードして最新の状態にしないと、上記の問題が発生する可能性があります。

于 2015-07-01T10:00:45.797 に答える
0
  1. プロジェクトの packages.config ファイルをコピーし、すべてのバージョンの変更を適用します
  2. すべてのパッケージをアンインストールして依存関係を削除する

    $packages = Get-Package -ProjectName [nameOfProjectToRestore]
    foreach ($package in $packages) {
        uninstall-package  -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
    }
    
  3. プロジェクトのルートにあるパッケージ フォルダーをクリアします。

  4. 変更した package.config を Web サイトのルート フォルダーにコピーします。

  5. このコードを実行してプロジェクトを復元します

    $packages = Get-Package -ProjectName [nameOfProjectToRestore]
    foreach ($package in $packages) {
        uninstall-package  -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
    }
    foreach ($package in $packages) {
        install-package  $package.Id -ProjectName [nameOfProjectToRestore] -Version $package.Version
    }
    
于 2013-12-08T23:40:04.163 に答える