Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > MSVC2017 & Setup project


Автор: zss 3.9.2018, 10:09
Более ранние версии студии при сборке данного проекта автоматически определяли зависимости.
Например, добавляли runtime library для проектов на c++.

Текущая версия этого не делает. Попытка делать это руками тоже не помогла,
т.к. приложение еще просит и msvcr120.dll. Не совсем понятно откуда сборка притянула
библиотеки для msvc2013, если сам проект и сторонние библиотеки собирались под 2017.
Попытка натравить depends не показала зависимостей от 2013.

Если ставить runtime для 2013 и 2017 руками вроде помогла.
Раз пошла такая пьянка, то решил добавить runtime и инсталлятор и запустить
в тихом режиме с ключем /quiet. Установка вылетает с ошибкой.

Так как правильно притянуть нужные runtime в пакет установки?
И что принципиально поменялось в 2017?

Автор: xvr 3.9.2018, 17:24
Цитата(zss @  3.9.2018,  10:09 Найти цитируемый пост)
Попытка делать это руками тоже не помогла,
т.к. приложение еще просит и msvcr120.dll.

Версию toolchain'а в проекте меняли?

Автор: zss 4.9.2018, 17:30
Цитата(xvr @ 3.9.2018,  17:24)
Цитата(zss @  3.9.2018,  10:09 Найти цитируемый пост)
Попытка делать это руками тоже не помогла,
т.к. приложение еще просит и msvcr120.dll.

Версию toolchain'а в проекте меняли?

Имеется в виду версию SDK? выставил руками 10.0.16299.0

Автор: xvr 4.9.2018, 22:12
Нет, не SDK. В проекте на вкладке General -> Platform Toolset (в английской версии). Там стоит версия компилятора (у меня например в VS2015 стоит Visual Studio 2015 (v140)). Если проект взят из предыдущей версии VS, там будет стоять предыдущая версия компиляторов. Обычно VS при открытии таких проектов предлагает заапгрейдить версию, но может этого и не сделать.
Если на машине стояла предыдущая версия VS то проект соберется в новой VS с компиляторами от старой (если не поменять эту настройку).
Если предыдущей VS не стояло, то проект не соберётся, а скорее всего потребует поменять версию тулсета (или поменяет сам)

Автор: zss 6.9.2018, 10:23
Цитата(xvr @  4.9.2018,  22:12 Найти цитируемый пост)
Нет, не SDK. В проекте на вкладке General -> Platform Toolset (в английской версии). Там стоит версия компилятора (у меня например в VS2015 стоит Visual Studio 2015 (v140)). Если проект взят из предыдущей версии VS, там будет стоять предыдущая версия компиляторов. Обычно VS при открытии таких проектов предлагает заапгрейдить версию, но может этого и не сделать.
Если на машине стояла предыдущая версия VS то проект соберется в новой VS с компиляторами от старой (если не поменять эту настройку).
Если предыдущей VS не стояло, то проект не соберётся, а скорее всего потребует поменять версию тулсета (или поменяет сам)


Везде руками поставил Visual Studio 2017 (v141). Не помогло. Похоже, что есть библиотеки, которые собирались с другим компилятором. Попытался
проверить зависимости библиотек - вроде все чисто. Нет зависимостей от msvcr120.dll

Автор: xvr 7.9.2018, 11:56
Киньте сюда файл солюшена и проектов, посмотрим ...

Автор: zss 7.9.2018, 12:47
В архиве проекты.
В солюшине смущают строки
Код

# Visual Studio 15
VisualStudioVersion = 15.0.27130.2020
MinimumVisualStudioVersion = 10.0.40219.1


Переделывал действительно из 15 студии

Автор: xvr 7.9.2018, 16:44
Ещё смущают строки
Код

<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
во всех файлах проекта.

Но ссылок на старый тулчейн действительно нет  smile 

Цитата(zss @  3.9.2018,  10:09 Найти цитируемый пост)
т.к. приложение еще просит и msvcr120.dll.

А как это выглядит?

Автор: zss 7.9.2018, 16:50
На чистой машине говорит, что приложение нельзя запустить, т.к. отсутствует msvcr120.dll

Добавлено через 3 минуты и 22 секунды
И самое главное, почему автоматом не добавляются runtime библиотеки в зависимости проекта, как раньше

Автор: xvr 8.9.2018, 09:11
Цитата(zss @  7.9.2018,  16:50 Найти цитируемый пост)
На чистой машине говорит, что приложение нельзя запустить, т.к. отсутствует msvcr120.dll

И depends не находит msvcr120.dll в зависимостях? Мистика какая то.
Может не та версия Qt подцепилась? У них dll одинаково называются для разных версий

Автор: zss 8.9.2018, 10:09
Машина была чистая. Qt ставил одну. Все библиотеки варил именно под нее. Правда, солюшен был из 15 студии. Но, даже если нужно msvcr120, то в зависимостях они бы появились. А так там вообще ничего нет. Не msvc ни qt. Если бы проект автоматом добавил бы msvcr120, ну и хрен с ним.

Автор: xvr 9.9.2018, 14:53
Цитата(zss @  8.9.2018,  10:09 Найти цитируемый пост)
 Если бы проект автоматом добавил бы msvcr120, ну и хрен с ним.

Это библиотека runtime, она в любом случае не добавляется явно в зависимости, а приносится (в зависимости) от тулчеёна. Как она смогла протащиться от VS2015 к VS2017 загадка  smile 

Цитата(zss @  8.9.2018,  10:09 Найти цитируемый пост)
А так там вообще ничего нет. Не msvc ни qt

Они добавляются неявно. Qt добавляет свои либы в плагине, а msvc в выборе run time'а прямо на главной странице проекта.

Могу только посоветовать пересоздать с нуля солюшен и проекты в VS2017

Автор: zss 10.9.2018, 11:13
Я тоже уже об этом подумал. Нужно пересоздать попробовать...

Автор: xvr 10.9.2018, 14:40
Кстати, если вы пробовали собирать проект, а потом меняли весрию toolchain'а, попробуйте сделать rebuild (что бы пересобрало гарантироованно всё, что есть). Могли застрять старые бинарники с кривыми ссылками (хотя это и маловероятно)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)