Использовать Visual Studio 2012 и компилировать с помощью более старого набора инструментов платформы?

Проблема

Я использую Visual Studio 2012 для разработки библиотек C++. На некоторых машинах эти библиотеки DLL не могут быть загружены из-за отсутствия набора инструментов платформы, для которого установлено значение «v110».

Я пытался установить более старые среды выполнения С++. Не установились, потому что "уже установлена ​​более новая версия". Я также установил текущий Windows SDK, но других пунктов на выбор, кроме v110, по-прежнему нет.

Вопрос

Как я могу скомпилировать свою DLL C++ с более старой версией среды выполнения C++, чтобы она работала на компьютерах, не являющихся разработчиками?

Набор инструментов платформы v110


person bytecode77    schedule 16.03.2013    source источник
comment
Пробовали ли вы установить распространяемый компонент Visual C++ для VS 2012 на этих машинах, не предназначенных для разработчиков, и посмотреть, работает ли это?   -  person In silico    schedule 16.03.2013
comment
Да, это работает. Но вместо того, чтобы заставлять пользователей устанавливать среды выполнения, я бы предпочел использовать более старые версии этих сред выполнения, чтобы мое приложение работало на целевой машине. Как выбрать более старую версию набора инструментов платформы в окне свойств?   -  person bytecode77    schedule 16.03.2013
comment
вам нужно установить более старую визуальную студию   -  person Radu Chivu    schedule 17.03.2013


Ответы (4)


Согласно этой странице в MSDN, вам необходимо иметь соответствующую версию Visual Studio ( 2008 или 2010) или соответствующий Windows SDK для раскрывающегося списка «Набор инструментов платформы», чтобы перечислить эти версии:

Чтобы изменить набор инструментов целевой платформы, у вас должна быть установлена ​​соответствующая версия Visual Studio или Windows Platform SDK.

Вы также, кажется, немного запутались между «Набором инструментов платформы», который контролирует, какой компилятор/компоновщик/и т.д. используется для сборки вашего приложения, а "Распространяемый компонент Visual C++" необходим для запуска вашего приложения. Вы не можете установить «Набор инструментов платформы» на ПК пользователя, и вы не сделаете его доступным, установив определенный «Распространяемый компонент Visual C++» на свой ПК для разработки.

Кроме того, насколько мне известно, распространяемый пакет Visual C++ не включает среды выполнения MFC. Они доступны в виде отдельного модуля слияния MSI (MSM).

person Roger Lipscombe    schedule 16.03.2013
comment
У меня установлен Windows SDK, но я не могу выбрать другую среду выполнения. - person bytecode77; 17.03.2013
comment
Тогда вам, вероятно, потребуется установить Visual Studio 2008 или 2010, к сожалению... - person Roger Lipscombe; 17.03.2013

Я хотел бы поделиться некоторой информацией, с которой я столкнулся и понял, как использовать их для своей цели.

По-видимому, это хороший вариант использования статической ссылки. Это не всегда работало для меня, но для моего небольшого проекта это работает довольно хорошо. И в результате получается DLL без каких-либо зависимостей, кроме kernel32.dll и им подобных.

Просто используйте /MT для конфигурации выпуска и /MTd для отладки, и все будет в порядке.

Проблема здесь в том, что такой разработчик, как я, получает текущую версию Visual Studio вскоре после ее выпуска, но нельзя ожидать, что у обычных пользователей будут установлены среды выполнения, которым всего несколько недель. И установка разных версий Visual Studio только для того, чтобы использовать старую среду выполнения, определенно не то, что вам нужно.

Статическое связывание в Visual Studio 2013

person bytecode77    schedule 05.11.2013
comment
К сожалению, это невозможно, если вы используете управляемый код (флаг /clr). Компиляция выдает это сообщение: Command line error D8016: '/clr' and '/MT' command-line options are incompatible. Вот обсуждение того, почему: windows-tech.info/17/5f0fd2024b850de5.php - person Rast; 16.02.2015

Подсказка для интернет-архива. (Я не могу комментировать утверждения выше, я не знаю, почему)

Чтобы использовать набор инструментов платформы v90 (=Visual Studio 2008) в более новой версии Visual Studio (я тестировал версии 2013 и 2015), вам необходимо установить Visual Studio 2008 и дополнительно Visual Studio 2010, поскольку определения набора инструментов платформы vs90 в папке программ MS Build являются частью Visual Studio 2010.

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets для v90 и v100

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0

для V110 V120 и V140

представляющие версии Visual Studio: v90=2008, v100=2010, V110=2012, V120=2013, V140=2015.

После установки vob VS2010 более новые версии Visual Studio 2013 и 2015 могут использовать наборы инструментов платформы vs90 и vs100. (Это работает сразу же без новой установки Visual Studio 2013/2015.) Я думаю, что Visual Studio 2012 делает это так же, как VS2013 и VS2015.

person bernie3280109    schedule 25.08.2016

ну, это зависит от того, что вы пытаетесь построить. Некоторые вещи могут поддерживаться при установке Windows SDK 7.1. см. этот пост, тот же вопрос, но если ваш проект зависит от MFC, то, к сожалению, похоже, что это вообще невозможно, в основном потому, что только VS2010 развертывает библиотеки MFC.

person 4pie0    schedule 16.03.2013
comment
Как я уже говорил, я пытался установить Windows SDK, но все еще не мог выбрать более старые версии среды выполнения. Кроме того, я не использую MFC. Эта DLL содержит только одну функцию и использует пару стандартных включаемых файлов. - person bytecode77; 17.03.2013
comment
пожалуйста, прочитайте эту тему, они смогли использовать набор инструментов SDK7.1 в VS2012, но получили ошибки при компиляции кода - person 4pie0; 17.03.2013