パッケージを再インストールし更新する方法How to reinstall and update packages

以下の「パッケージを再インストールするタイミング」で説明しているとおり、Visual Studio のプロジェクトでは、パッケージへの参照が壊れてしまう状況が多々あります。There are a number of situations, described below under When to Reinstall a Package, where references to a package might get broken within a Visual Studio project. このような場合、パッケージの同じバージョンをアンインストールして再インストールすると、それらの参照は復元され動作するようになります。In these cases, uninstalling and then reinstalling the same version of the package will restore those references to working order. パッケージを更新するということは、単純に更新されたバージョンをインストールすることを意味し、これによってパッケージはしばしば動作する状態に復元されます。Updating a package simply means installing an updated version, which often restores a package to working order.

パッケージの更新と再インストールは次の順序で行います。Updating and reinstalling packages is accomplished as follows:

メソッドMethod 更新Update 再インストールReinstall
パッケージ マネージャー コンソール (「Update-Package の使用」を参照)Package Manager console (described in Using Update-Package) Update-Package コマンドUpdate-Package command Update-Package -reinstall コマンドUpdate-Package -reinstall command
パッケージ マネージャー UIPackage Manager UI [更新] タブで、1 つ以上のパッケージを選択し、[更新] を選択します。On the Updates tab, select one or more packages and select Update [インストール] タブで、パッケージを選択し、その名前を書き留め、[アンインストール] を選択します。On the Installed tab, select a package, record its name, then select Uninstall. [参照] タブに切り替え、パッケージ名を検索して選択し、[インストール] を選択します。Switch to the Browse tab, search for the package name, select it, then select Install).
nuget.exe CLInuget.exe CLI nuget update コマンドnuget update command すべてのパッケージで、パッケージ フォルダーを削除し、nuget install を実行します。For all packages, delete the package folder, then run nuget install. 1 つのパッケージで、パッケージ フォルダーを削除し、nuget install <id> を使用して同じものを再インストールします。For a single package, delete the package folder and use nuget install <id> to reinstall the same one.

この記事の内容:In this article:

パッケージを再インストールするタイミングWhen to Reinstall a Package

  1. パッケージの復元後に参照が壊れた場合: プロジェクトを開いて NuGet パッケージを復元した場合でも参照が壊れている場合、それらのパッケージをそれぞれ再インストールしてください。Broken references after package restore: If you've opened a project and restored NuGet packages, but still see broken references, try reinstalling each of those packages.
  2. ファイルを削除したためにプロジェクトが壊れた場合: NuGet では、ユーザーがパッケージから追加されたアイテムを削除することを阻みません。したがって、パッケージからインストールされたコンテンツを不注意に簡単に変更できてしまい、プロジェクトを壊すことができます。Project is broken due to deleted files: NuGet does not prevent you from removing items added from packages, so it's easy to inadvertently modify contents installed from a package and break your project. プロジェクトを復元するには、影響を受けたパッケージを再インストールします。To restore the project, reinstall the affected packages.
  3. パッケージの更新によりプロジェクトが壊れた場合: プロジェクトを更新したことが原因でプロジェクトが壊れた場合、一般的に障害は、更新プログラムの可能性もある依存関係パッケージによって起こります。Package update broke the project: If an update to a package breaks a project, the failure is generally caused by a dependency package which may have also been updated. 依存関係の状態を復元するには、その特定のパッケージを再インストールします。To restore the state of the dependency, reinstall that specific package.
  4. プロジェクトの再ターゲットまたはアップグレードの場合: これは、プロジェクトが再ターゲットされたかアップグレードされた場合、ターゲット フレームワークの変更のためにパッケージを再インストールする必要がある場合に便利です。Project retargeting or upgrade: This can be useful when a project has been retargeted or upgraded and if the package requires reinstallation due to the change in target framework. NuGet では、このような場合、プロジェクトの再ターゲット後に直ちにビルド エラーが表示されます。そしてその後のビルド警告により、パッケージを再インストールする必要がある場合があることが通知されます。NuGet shows a build error in such cases immediately after project retargeting, and subsequent build warnings let you know that the package may need to be reinstalled. プロジェクトをアップグレードする必要がある場合、NuGet では、プロジェクトのアップグレード ログにエラーが表示されます。For project upgrade, NuGet shows an error in the Project Upgrade Log.
  5. 開発時にパッケージを再インストールする場合: パッケージ作成者はしばしば、開発しているパッケージの動作確認のために、そのパッケージの同じバージョンを再インストールする必要があります。Reinstalling a package during its development: Package authors often need to reinstall the same version of package they're developing to test the behavior. Install-Package コマンドには再インストールを強制するオプションがないので、代わりに Update-Package -reinstall を使用します。The Install-Package command does not provide an option to force a reinstall, so use Update-Package -reinstall instead.

アップグレード バージョンを制限するConstraining upgrade versions

既定では、パッケージを再インストールまたは更新した場合、パッケージ ソースから使用可能な最新バージョンが常にインストールされます。By default, reinstalling or updating a package always installs the latest version available from the package source.

ただし、packages.config 管理形式を使用するプロジェクトでは、バージョン範囲を具体的に制限することができます。In projects using the packages.config management format, however, you can specifically constrain the version range. たとえば、恐らくはパッケージ API の大幅な変更により、アプリケーションがパッケージのバージョン 2.0 以上では機能せず、1.x のみで機能することがわかっている場合、バージョン 1.x にアップグレードすることに制限したいとします。For example, if you know that your application works only with version 1.x of a package but not 2.0 and above, perhaps due to a major change in the package API, then you'd want to constrain upgrades to 1.x versions. これにより、偶発的に更新されることにより、アプリケーションが機能しなくなってしまうことを避けることができます。This prevents accidental updates that would break the application.

制限を設定するには、テキスト エディターで packages.config を開き、問題の依存関係を探し、バージョン範囲と共に allowedVersions 属性を追加します。To set a constraint, open packages.config in a text editor, locate the dependency in question, and add the allowedVersions attribute with a version range. たとえば、更新をバージョン 1.x に制限する場合、allowedVersions[1,2) に設定します。For example, to constrain updates to version 1.x, set allowedVersions to [1,2):

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="ExamplePackage" version="1.1.0" allowedVersions="[1,2)" />

    <!-- ... -->
</packages>

いずれの場合も、「Package versioning」(パッケージのバージョン管理) で説明されている表記を使います。In all cases, use the notation described in Package versioning.

Update-Package の使用Using Update-Package

以下の「考慮事項」を意識しながら、Visual Studio パッケージ マネージャー コンソール ([ツール] > [NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール]) の [Update-Package コマンド] を使用して、すべてのパッケージを簡単に再インストールできます。Being mindful of the Considerations described below, you can easily reinstall any package using the Update-Package command in the Visual Studio Package Manager Console (Tools > NuGet Package Manager > Package Manager Console):

Update-Package -Id <package_name> –reinstall

このコマンドの使用は、パッケージを削除し、NuGet ギャラリーで同じバージョンの同じパッケージを探すよりもはるかに簡単です。Using this command is much easier than removing a package and then trying to locate the same package in the NuGet gallery with the same version. なお、-Id スイッチは省略可能です。Note that the -Id switch is optional.

-reinstall なしの同じコマンドでは、存在する場合、パッケージがより新しいバージョンに更新されます。The same command without -reinstall updates a package to a newer version, if applicable. 問題のパッケージがプロジェクトにまだインストールされていない場合、このコマンドによってエラーが表示されます。つまり、Update-Package でパッケージが直接インストールされません。The command gives an error if the package in question is not already installed in a project; that is, Update-Package does not install packages directly.

Update-Package <package_name>

既定では、Update-Package はソリューション内のすべてのプロジェクトに影響します。By default, Update-Package affects all projects in a solution. 特定のプロジェクトにアクションを制限するには、ソリューション エクスプローラーに表示されるプロジェクト名を使用し、-ProjectName スイッチを使用します。To limit the action to a specific project, use the -ProjectName switch, using the name of the project as it appears in Solution Explorer:

# Reinstall the package in just MyProject
Update-Package <package_name> -ProjectName MyProject -reinstall

プロジェクトのすべてのパッケージを更新するには (または -reinstall を使用して再インストールするには)、特定のパッケージを指定せずに -ProjectName を使用します。To update all packages in a project (or reinstall using -reinstall), use -ProjectName without specifying any particular package:

Update-Package -ProjectName MyProject

ソリューション内のすべてのパッケージを更新するには、Update-Package を他の引数やスイッチなしで単体で使用します。To update all packages in a solution, just use Update-Package by itself with no other arguments or switches. すべての更新を行うには、かなり時間がかかるため、このフォームは慎重に使用してください。Use this form carefully, because it can take considerable time to perform all the updates:

# Updates all packages in all projects in the solution
Update-Package 

PackageReferenceを使用してプロジェクトまたはソリューションのパッケージを更新する場合、パッケージは常に最新バージョンに更新されます (リリース前のパッケージは除きます)。Updating packages in a project or solution using PackageReference always updates to the latest version of the package (excluding pre-release packages). プロジェクトで packages.config を使用している場合、必要に応じて、以下の「アップグレード バージョンを制限する」で説明するとおり、更新バージョンを制限できます。Projects that use packages.config can, if desired, limit update versions as described below in Constraining upgrade versions.

完全なコマンドについては、「Update-Package」を参照してください。For full details on the command, see the Update-Package reference.

注意事項Considerations

パッケージを再インストールする場合、以下の影響がある場合があります。The following may be affected when reinstalling a package:

  1. プロジェクト ターゲット フレームワークの再ターゲットに従ったパッケージの再インストールReinstalling packages according to project target framework retargeting

    • 単純なケースでは、Update-Package –reinstall <package_name> を使用してパッケージを再インストールするたけで機能します。In a simple case, just reinstalling a package using Update-Package –reinstall <package_name> works. 古いターゲット フレームワークに対してインストールされたパッケージは、アンインストールされ、同じパッケージがそのプロジェクトの現在のターゲット フレームワークに対してインストールされます。A package that is installed against an old target framework gets uninstalled and the same package gets installed against the current target framework of the project.
    • パッケージで、新しいターゲット フレームワークがサポートされない場合もあります。In some cases, there may be a package that does not support the new target framework.
      • パッケージがポータブル クラス ライブラリ (PCL) をサポートし、プロジェクトがパッケージがサポートしなくなったプラットフォームの組み合わせに再ターゲットされている場合、パッケージへの参照は再インストール後に失われます。If a package supports portable class libraries (PCLs) and the project is retargeted to a combination of platforms no longer supported by the package, references to the package will be missing after reinstalling.
      • これは直接使用しているパッケージまたは依存関係でインストールされたパッケージで生じます。This can surface for packages you're using directly or for packages installed as dependencies. その依存関係はサポートしない場合でも、使用しているパッケージで、新しいターゲット フレームワークを直接サポートさせることは可能です。It's possible for the package you're using directly to support the new target framework while its dependency does not.
      • アプリケーションの再ターゲット後にパッケージを再インストールすることによって、ビルド エラーまたはランタイム エラーが発生する場合、ターゲット フレームワークを元に戻すか、新しいターゲット フレームワークを正しくサポートする別のパッケージを探す必要があります。If reinstalling packages after retargeting your application results in build or runtime errors, you may need to revert your target framework or search for alternative packages that properly support your new target framework.
  2. プロジェクトの再ターゲットまたはアップグレード後に、packages.config に requireReinstallation 属性が追加されるrequireReinstallation attribute added in packages.config after project retargeting or upgrade

    • NuGet によってプロジェクトの再ターゲットまたはアップグレードによってパッケージが影響を受けたと検出された場合、影響を受けたすべてのパッケージ参照の packages.configrequireReinstallation="true" 属性が追加されます。If NuGet detects that packages were affected by retargeting or upgrading a project, it adds a requireReinstallation="true" attribute in packages.config to all affected package references. このため、Visual Studio のそれ以降の各ビルドでは、再インストールすることを忘れないように、それらのパッケージでビルド警告が発せられます。Because of this, each subsequent build in Visual Studio raises build warnings for those packages so you can remember to reinstall them.
  3. 依存関係と共にパッケージを再インストールするReinstalling packages with dependencies

    • Update-Package –reinstall では元のパッケージの同じバージョンが再インストールされますが、依存関係は、特定のバージョン制限を指定しない限り、最新バージョンがインストールされます。Update-Package –reinstall reinstalls the same version of the original package, but installs the latest version of dependencies unless specific version constraints are provided. このため、問題を修正するには必要な依存関係のみを更新します。This allows you to update only the dependencies as required to fix an issue. ただし、これにより、依存関係が以前のバージョンにロールバックされる場合、依存パッケージには影響を与えずに、Update-Package <dependency_name> を使用して、その 1 つの依存関係のみを再インストールできます。However, if this rolls a dependency back to an earlier version, you can use Update-Package <dependency_name> to reinstall that one dependency without affecting the dependent package.
    • Update-Package –reinstall <packageName> -ignoreDependencies では、元のパッケージの同じバージョンが再インストールされますが、依存関係は再インストールされません。Update-Package –reinstall <packageName> -ignoreDependencies reinstalls the same version of the original package but does not reinstall dependencies. パッケージの依存関係を更新したことによって壊れてしまう場合、これを使用してください。Use this when updating package dependencies might result in a broken state
  4. 依存しているバージョンが含まれている場合にパッケージを再インストールするReinstalling packages when dependent versions are involved

    • 上で説明したとおり、パッケージを再インストールしても、それに依存する他のインストールされているパッケージのバージョンは変わりません。As explained above, reinstalling a package does not change versions of any other installed packages that depend on it. その場合、依存関係を再インストールした場合、依存パッケージが壊れてしまう場合があります。It's possible, then, that reinstalling a dependency could break the dependent package.