VisualStudioのWindowsでC ++プロジェクトを開発する昔は、VisualStudioバージョンには独自のバージョンのCおよびC ++ライブラリがあり、プロジェクトはアクセス用のヘッダーにアクセスするために特定のバージョンのWindowsSDKを参照していました。 Win32プラットフォームに。複数のバージョンのWindowsSDKがインストールされている場合、環境変数を含む複雑なシステムがあり、Windows SDK VisualStudioのどのバージョンをデフォルトで使用するかを選択できます。
それは素晴らしくなく、それを適切に機能させるには少し掘り下げる必要がありましたが、それはほぼ機能しました。
VS2012からVS2015にアップグレードしたばかりで、このシステムに置き換えられたものはすべて完全に壊れているか、理解していないようです。
conio.hを含む単純なVS2012C ++コンソールアプリをVS2015にアップグレードすると、エラーは報告されずに中断します。どうして?conio.hはVisualStudio C / C ++ライブラリに含まれなくなり、代わりにWindows Kit 10に含まれるようになりました。プロジェクトをアップグレードしても、使用されているSDKが再インストールされません(予想どおり)。
VS2015で新しいHelloWorld C ++アプリを作成すると、C ++プロジェクトのインクルードディレクトリは$(VC_IncludePath)と$(WindowsSDK_IncludePath)を継承します。$(WindowsSDK_IncludePath)はC:\ Program Files(x86)\ Windows Kits \ 8.1からヘッダーをプルし、$(VC_IncludePath)はC:\ Program Files(x86)\ Windows Kits \ 10からヘッダーをプルします。
そのため、単純なプロジェクトのアップグレードは失敗し、アップグレードでエラーは報告されません。クリーンな新しいコンソールプロジェクトは、2つの異なるWindows Kitインストールから同時にヘッダーをプルします。C:\ ProgramFiles(x86)\ Microsoft SDKsとC:\ Program Files(x86)\ WindowsKitsの下に8.1と10のエントリがあります。Windowsキット8.1にはWin32ヘッダーとWinRtヘッダーが含まれ、Windowsキット10にはC / C ++ヘッダーが含まれています。
インストールが正しく構成されておらず、破損していますか?それとも、これが想定どおりに混乱していますか?
この混乱が本来あるべき姿である場合、これはどのように機能することを意図していますか?私はMSDNでWindowsKitsに関する情報を検索しようとしましたが、以前はまったく異なるものであったWindows Driver Kitに関するもの以外は何も見つかりませんでしたが、それがまだあるかどうかはわかりません。
このライブラリ構成の背後にある理論的根拠と、それがどのように使用されることを意図しているかを説明する、私が見逃したドキュメントはありますか?
VS2012からVS2015にアップグレードされたプロジェクトのヘッダーファイルとライブラリの依存関係の両方を解決する問題で、この問題のいくつかの異なるバリエーションに何度か遭遇しました。
私の質問に対するハンスのコメントは確かにヘッダーの問題を修正しますが、ライブラリの依存関係で同じ問題が発生した後、失敗したライブラリの依存関係の解決にも機能するより簡単な解決策があるかもしれません。
VS2015でVS2012プロジェクトを開くと、自動アップグレードは実行されません。プロジェクトのプロパティを開き、[一般]-> [プラットフォームツールセット]を[VisualStudio 2015(v140)]に変更すると、元の質問で説明したヘッダー解決エラーのバリアントまたは別のライブラリ依存関係解決エラーが再現される可能性があります。
これらを修正するために私が見つけた最も簡単な方法は、プロジェクトプロパティを開き、[VC ++ディレクトリ]-> [ディレクトリを含める]に移動することです。プロジェクトに自分で追加したパスの中には、おそらく$(VCInstallDir)\ include; $(VCInstallDir \ atlmfc \ include; $(WindowsSDK_IncludePath)があります。
パスをクリックしてドロップダウンを表示し、[編集]をクリックします。これにより、上から下に、明示的に定義されたパス、評価されたパス、および継承されたパスの3つのセクションを含むダイアログが表示されます。一番下にあるのは、「親またはプロジェクトのデフォルトから継承する」チェックボックスです。これは、最初はオフになっていることが常にわかっています。
明示的に定義されたインクルードパスから、上記の$(VCInstallDir)\ include; $(VCInstallDir \ atlmfc \ include; $(WindowsSDK_IncludePath)エントリを削除し、[親またはプロジェクトのデフォルトから継承]設定を選択します。これにより、ヘッダーファイルの依存関係が解決されます。問題。
ライブラリ参照の問題もある場合は、ライブラリディレクトリエントリで同じことを行い、設定を編集し、明示的なプラットフォームエントリを削除して、[親またはプロジェクトのデフォルトから継承]を選択します。(リンカーエラーが表示されない場合でも、これを行うことをお勧めします。そうしないと、VS2012のライブラリにリンクしているときにVS2015のプラットフォームツールセットコンパイラオプションを使用することになります)。
同様の問題を抱えている人に出会ったことがないのに、なぜこれが台無しになっているのかわかりません。これまでVisualStudioソリューションのアップグレードに問題はありませんでした。
また、以前はSDKに常にプラットフォームヘッダーが含まれていましたが、C ++ヘッダーは常に一部であったか、Visual Studioのインストールであったのに、Windowsキットの一部のバージョンにWindowsプラットフォームヘッダーまたはC ++ライブラリヘッダーが含まれるようになった理由もわかりません。このような変更には、それに関する開発ブログまたは他のドキュメントが必要なようです。しかし、それが機能する限り、私はあまり気にしません。
これが誰かに役立つことを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加