В старые времена при разработке проекта C ++ для Windows в Visual Studio ваша версия Visual Studio имела бы собственную версию библиотек C и C ++, а ваш проект ссылался на конкретную версию Windows SDK, чтобы получить доступ к заголовкам для доступа. на платформу Win32. Если у вас было установлено несколько версий Windows SDK, существовала сложная система, включающая переменные среды, которая позволяла вам выбрать, какую версию Windows SDK Visual Studio будет использовать по умолчанию.
Это было не здорово, и чтобы заставить его работать должным образом, нужно было немного покопаться, но это было просто работа.
Я только что перешел с VS2012 на VS2015, и мне кажется, что то, чем была заменена эта система, либо полностью сломано, либо я просто не понимаю этого.
Обновление простого консольного приложения VS2012 C ++, которое включает conio.h до VS2015, без ошибок. Зачем? conio.h больше не находится в библиотеках Visual Studio C / C ++ и вместо этого теперь живет в Windows Kit 10, обновление проекта не соответствует используемому SDK (как и следовало ожидать).
Создавая новое приложение Hello World C ++ в VS2015, проект 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, и теперь у меня есть записи для 8.1 и 10 в C: \ Program Files (x86) \ Microsoft SDK и C: \ Program Files (x86) \ Windows Kits. Windows Kit 8.1 содержит заголовки Win32 и WinRt, а Windows Kit 10 содержит заголовки C / C ++.
У меня неправильно настроенная или поврежденная установка, или это беспорядок, как это должно быть?
Если этот беспорядок такой, каким он должен быть, как он должен работать? Я пытался найти в MSDN информацию о Windows Kits, но ничего не нашел, кроме информации о Windows Driver Kit, которая раньше была чем-то совершенно другим, но я не знаю, так ли это до сих пор.
Есть ли какая-то документация, которую я пропустил, которая объясняет обоснование этой конфигурации библиотеки и как она предназначена для использования?
Сейчас я несколько раз сталкивался с несколькими различными вариантами этой проблемы, с проблемами, решающими как заголовочные файлы, так и зависимости библиотек в проектах, обновленных с VS2012 до VS2015.
Комментарий Ханса в ответ на мой вопрос действительно исправляет проблему для заголовков, но после того, как я столкнулся с той же проблемой для библиотечных зависимостей, у меня есть то, что может быть более простым решением, которое работает и для неудачного разрешения библиотечных зависимостей.
При открытии проекта VS2012 в VS2015 автоматическое обновление не выполняется. Открытие свойств проекта и изменение General -> Platform Toolset на Visual Studio 2015 (v140), скорее всего, воспроизведет либо вариант ошибки разрешения заголовка, описанный в моем исходном вопросе, либо другую ошибку разрешения зависимостей библиотеки.
Я нашел самый простой способ исправить это, открыть свойства проекта и перейти в каталоги VC ++ -> Включить каталоги. Среди любых путей, которые вы, возможно, добавили в свой проект самостоятельно, вы, вероятно, найдете $ (VCInstallDir) \ include; $ (VCInstallDir \ atlmfc \ include; $ (WindowsSDK_IncludePath)
Щелкните путь, чтобы отобразить раскрывающийся список, и нажмите кнопку «Изменить». Откроется диалоговое окно с тремя разделами сверху вниз, явно определенными путями, оцененными путями и унаследованными путями. В самом низу находится флажок «Наследовать от родительского или проекта по умолчанию», который я всегда находил изначально непроверенным.
Из явно определенных путей включения удалите записи $ (VCInstallDir) \ include; $ (VCInstallDir \ atlmfc \ include; $ (WindowsSDK_IncludePath), описанные выше, и выберите параметр «Наследовать от родителя или по умолчанию проекта». Это должно разрешить любую зависимость файла заголовка проблемы.
Если у вас также есть проблемы со ссылками на библиотеку, сделайте то же самое с записями в каталоге библиотеки, отредактируйте настройки, удалите явные записи платформы и выберите «Наследовать от родительского или проекта по умолчанию». (Это может быть хорошей идеей, даже если вы не видите ошибок компоновщика, в противном случае вы можете использовать опцию компилятора набора инструментов платформы для VS2015 при подключении к библиотекам для VS2012).
Я не знаю, почему это облажалось для меня, когда я не сталкивался с кем-то, кто сталкивался с подобными проблемами, у меня не было проблем с обновлением решений Visual Studio.
Я также не выяснил, почему некоторые версии Windows Kits теперь содержат либо заголовки платформы Windows, либо заголовки библиотеки C ++, когда ранее SDK всегда содержал заголовки платформы, в то время как заголовки C ++ всегда были частью или установкой Visual Studio. Похоже, что подобное изменение должно иметь где-то блог разработчика или какую-то другую документацию. Но пока это работает, мне все равно.
Надеюсь, это кому-нибудь поможет.
Других решений пока нет …