VC++ で NuGet パッケージ更新ができない、winrt/base.h が見つからない場合の対処
Page content
NuGet でパッケージをインストールしてビルドすると、 所定のディレクトリにヘッダファイルが生成されるが、 そのヘッダファイルが生成されない、あるいは更新されなくなることがある。
今回のネタは、この状態を解消する方法について。
エラーの解消
エラーの症状は幾つかあるが、だいたいは次のいずれか。
- winrt/base.h が見つからない。 (base.h に限らず winrt/ 以下のファイルが見つからない)
- NuGet でインストールしたパッケージが見つからない
- NuGet でインストールしたパッケージのバージョンが意図したバージョンと異なる
この現象の対処のとして、公式の HP には以下の情報がある。
<https://learn.microsoft.com/ja-jp/nuget/consume-packages/package-restore-troubleshooting>
しかし、残念ながらこれでは上手くいかないケースがあった。
ではどうするか?
プロジェクト.vcxproj 内に記載されている
import エレメント <Import Project="" />
において、
問題が発生しているパッケージのエレメントを削除する。
なお、パッケージのバージョンの更新などを行なっているとその情報も入っているので、 それも含めて削除する。 削除後、 visual studio でプロジェクトを開きなおす。 そして、 NuGet マネージャで使用したいパッケージをインストールしなおす。
パッケージのバージョンを切り替えているのに切り替わらない場合
- 一旦所望のバージョンとは異なるバージョンのパッケージをインストールする。
- そしてインストールした後で、ビルドを行なう。
- 次に、 "プロジェクト.vcxproj" から当該のバージョンの情報を削除する。
- そして所望のバージョンのパッケージをインストールする。
- この後にビルドを行なう。
これによって、切り替えた後のバージョンで winrt 以下が更新される。
まとめると、以下が重要。
これを行なうと強制的にパッケージの更新が行なわれる。
- "プロジェクト.vcxproj" から
<Import Project="" />
を削除する - NuGet マネージャでパッケージをインストール
- ビルド