Visual Studio 2019 расширяет границы индивидуальной и командной производительности. Мы надеемся, что эти нововведения окажутся для вас привлекательными, и вы вскоре начнете обновление до Visual Studio 2019.


Visual Studio 2019 значительно упрощает перенос вашего кода из предыдущих версий Visual Studio. В этом посте описаны факторы, благодаря которым обновление до Visual Studio 2019 будет безболезненным.


  • Вы можете установить последнюю версию IDE параллельно с любыми старыми версиями VS.
  • Вы можете продолжить написание кода на C++ с помощью наборов инструментов MSVC v140 (VS 2015.3) или v141 (VS 2017).
  • Вы можете выполнить обновление до последней версии MSVC v142 (VS 2019) и поддерживать двоичную совместимость с любыми сторонними библиотеками, которые еще не перенесены.
  • Независимо от того, какой набор инструментов вы используете, вы получаете доступ ко всей коллекции библиотек OSS, доступных в Vcpkg.

За перевод спасибо нашему MSP, Льву Буланову.

Параллельная установка Visual Studio


Вы можете установить последнюю версию Visual Studio на компьютер, на котором уже установлена более ранняя версия, и продолжать использовать обе версии параллельно без помех. Это отличный способ попробовать Visual Studio 2019 или использовать его для некоторых своих проектов. Установщик Visual Studio позволит вам управлять версиями Visual Studio 2017 и 2019 из центрального пользовательского интерфейса.




Наборы инструментов MSVC v140 (VS 2015.3) и MSVC v141 (VS 2017) в IDE Visual Studio 2019


Даже если вы еще не готовы переместить проект в новейший набор инструментов (MSVC v142), вы все равно можете загрузить проект в среде IDE Visual Studio 2019 и продолжить использовать текущий, более старый набор инструментов.


Загрузка существующих проектов C++ в IDE не приведет к обновлению или изменению их файлов. Таким образом, ваши проекты также загрузятся в предыдущей версии IDE в  той ситуации, когда вам нужно вернуться назад, или если у вас есть товарищи по команде, которые еще не обновились до VS 2019 (эта функция также известна как циклическое переключение проекта).


Наборы инструментов из более старых версий VS на вашем компьютере видны как наборы инструментов платформы в последней IDE. И если вы начнете работу только с версией VS 2019, установленной на вашем компьютере, получится очень просто получить старые наборы инструментов непосредственно из установщика Visual Studio, настроив рабочую нагрузку C++ Desktop (на вкладке «Individual Components» перечислены все параметры).


Теперь доступен новый набор инструментов v142


В рамках   Visual Studio 2019 (Preview, общедоступной версии и будущих обновлений) мы планируем продолжить развитие наших C++ компиляторов и библиотек с:


  • новыми фичами C++20,
  • более быстрой сборкой ,
  • еще лучшей оптимизацией кода.

Набор инструментов MSVC v142 уже доступен.


VC Runtime в последнем наборе инструментов MSVC v142 двоично совместим с v140 и v141


Мы хорошо поняли, что основной причиной, способствующей быстрому распространению MSVC v141, стала его двоичная совместимость с MSVC v140. Это позволило вам перенести свой собственный код в набор инструментов v141 в удобном для вас темпе, не дожидаясь переноса зависимостей сторонних библиотек.


Мы хотим добиться того же и с MSVC v142. Вот почему мы объявляем, что наша команда обеспечит двоичную совместимость для MSVC v142 с MSVC v141 и v140.


Это означает, что если вы скомпилируете весь свой код с помощью набора инструментов v142, но при этом у вас останется одна или несколько библиотек, созданных с использованием набора инструментов v140 или v141, то связывание всего это вместе (с последним линкером) будет работать как положено. Чтобы сделать это возможным, VC Runtime не меняет свою основную версию в VS 2019 и остается обратно совместимой с предыдущими версиями VC Runtime.


C:\source\repos\TimerApp\Debug>dumpbin TimerApp2019.exe /IMPORTS | findstr .dll
mfc140ud.dll
KERNEL32.dll
USER32.dll
GDI32.dll
COMCTL32.dll
OLEAUT32.dll
gdiplus.dll
VCRUNTIME140D.dll
ucrtbased.dll
       2EE _seh_filter_dll

При смешивании двоичных файлов, созданных с различными поддерживаемыми версиями набора инструментов MSVC, существует требование к версии для VCRedist. В частности, VCRedist не может быть старше любой из версий набора инструментов, используемых для создания вашего приложения.


Сотни библиотек C++ на Vcpkg доступны независимо от используемого набора инструментов


Если вы используете Vcpkg с VS 2015 или VS 2017 для одной или нескольких ваших open-source зависимостей  , вы будете рады узнать, что эти библиотеки (около 900 на момент написания этой статьи) теперь могут быть скомпилированы с помощью набора инструментов MSVC v142 и доступны для использования в проектах Visual Studio 2019.


Если вы только начинаете работать с Vcpkg, не беспокойтесь — Vcpkg — это open-source проект Microsoft, призванный упростить получение и создание open-source библиотек C++  в Windows, Linux и Mac.


Поскольку v142 двоично совместим с v141 и v140, все уже установленные пакеты также будут продолжать работать в VS 2019 без перекомпиляции; однако мы все же рекомендуем перекомпилировать, чтобы вы могли наслаждаться новыми оптимизациями компилятора, которые мы добавили в v142.


Если у вас установлен VS 2019 Preview параллельно со старой версией VS (например, VS 2017), Vcpkg предпочтет стабильный выпуск, поэтому вам потребуется установить для Vcpkg триплетную переменную VCPKG_PLATFORM_TOOLSET в v142, чтобы использовать последний набор инструментов MSVC.


Версия компилятора MSVC изменяется на 19.2 x (с 19.1 x в MSVC v141)


И последнее, но не менее важное: компиляторная часть набора инструментов MSVC v142 изменяет свою версию на 19.20 –незначительное увеличение версии по сравнению с MSVC v141.


Обратите внимание, что макросы feature-test поддерживаются в компиляторе MSVC и STL, начиная с MSVC v141, и они должны быть предпочтительным вариантом, позволяющим вашему коду поддерживать несколько версий MSVC.


Call to action


Пожалуйста, загрузите Visual Studio 2019 и дайте фидбек. Наша цель — сделать ваш переход на VS 2019 максимально простым, поэтому мы всегда заинтересованы в ваших отзывах. С нами можно связаться по электронной почте (mailto:visualcpp@microsoft.com).


Если у вас возникли другие проблемы с Visual Studio или MSVC, или у вас есть предложение, сообщите нам об этом через Help > Send Feedback > Report A Problem / Provide a Suggestion в продукте или через Developer Community. Вы также можете найти нас в Твиттере @VisualC.

Комментарии (13)


  1. NeoPhix
    22.02.2019 11:12
    +1

    Может быть глупый вопрос: а зачем вообще было раньше менять бинарную совместимость C++кода в каждой новой версии MSVC компиляторов? Это как-то связано с оптимизацией генерируемого кода или «просто так»?


  1. al_sh
    22.02.2019 11:44
    +1

    а 64бит мы дождемся в обозримом будущем?


  1. domix32
    22.02.2019 12:48
    +1

    кэширование результатов индексации завезли?


  1. telhin
    22.02.2019 12:50

    Была проблема с переходом с VS2015 на VS2017. Сборка настраивается при помощи CMake. Среди зависимостей есть CUDA 8.0, которая совместима с VS2015. При этом для работы необходима CUDA Visual Studio integration, которую настраивает установщик CUDA. На VS2017 установщик поставить интеграцию не смог.
    С одной стороны это проблемы CUDA установщика. С другой стороны тулсет обратной совместимости хоть и присутствует, но для установщика CUDA сама студия является неподходящей.


    Учитывая то, что заявляется бинарная совместимость, можно предположить, что при наличии интеграции CUDA проект бы корректно собирался.


    Я не знаю какие механизмы используются для подключения CUDA интеграции, однако мне кажется интересным вопрос симуляции поведения старшей версии Visual Studio, как младшей.


    Таким образом хоть и есть бинарная совместимость, но бесшовного перехода между v140 и v141 тулсетом не получилось.


    Дисклеймер: написанное выше просто ответ на Call to action из статьи. Я знаю что это попытка совместить не совместимое. Единственное что было бы правильно сделать — сменить версию CUDA, что в последствии и было сделано.


  1. dude_sam
    22.02.2019 13:13

    Удобный вариант получения offline-установщика появился ?


    1. zartarn
      22.02.2019 15:21

      А сейчас есть проблема? запускаешь онлайн установщик, выбираешь то что нужно. Выбираешь внизу «сначала скачать».
      image
      Он начинает качать. И в этом же окне есть галка «установить». Ее убираешь и всё. После скачки будет офлайн вариант для установки, а самой установки не будет. Потом только через сетап запускать.
      Хотя проще через командную строку
      vs_enterprise.exe --layout c:\VS2017Layout --lang en-US --all


      1. 0xf0a00
        22.02.2019 16:25

        Угу. У меня был такой инсталяк. Потом я попытался его установить еще раз через некоторое время и он начал качать все заново полностью игнорируя то что раньше скачал.


      1. Mingun
        22.02.2019 18:08

        Вас просили удобный, а не существующий. Существующему до удобства далеко.


        1. zartarn
          22.02.2019 18:13

          0xf0a00 Один раз такое было. давно. Больше не повторялось.

          Mingun я назвал целых ДВА способа. и оба удобные.
          Выкачать только нужный набор компонентов вместо монолитного образа на овердохера гигов. Плюс иметь возможность поддерживать в актуальном виде буквально одной строчкой в консоли — это удобно.


          1. Mingun
            22.02.2019 18:28

            1. Нельзя выбрать, куда сохранить, а качает он куда-то в дебри AppData или около того (не помню уже за давностью времени).
            2. При остановке и возобновлении закачки плюёт на всё и перекачивает заново (чем это в таком случае удобнее монолитного образа, если качать всё равно столько же. Образов кстати было несколько, абсолютно всё качать не надо было, если тебе нужен, скажем, только С#).
            3. Строчка в консоли – это удобно, да… Если бы она опять не пыталась выкачать всё заново спустя некоторое время (обновления же, куда же без них!). И смысл тогда в этой строчке?
            4. По-моему, студию нельзя было запустить во время этого действа, ведь работает же установщик, дождитесь окончания его работы.

            Короче, в конечном итоге, когда у меня сломалась студия, проще оказалось скачать её заново, чем запускать установку из уже скачанного дистрибутива.


            1. zartarn
              22.02.2019 18:33

              1. не скажу. проверять лень. а пользуюсь только консольной версией давно.
              2. относится только к оконной версии.
              3. так консольная версия и нужна для перекачивания выкачивания. вчера только докачивал недостающее ей. А потом через оконную версию ставил и то что уже имеется. и еще с докачкой.
              4. Установщик работает паралельно. можно хоть еще одну студию установить.

              гугл показывает наличие проблемы с офлайн установщиком. но похоже оно решается запуском без интернета (что офлайн и подразумевает на самом деле). Но если запустил при наличии интернета и отменил. то потом уже не важно. попросит обновить. Я то качал для установки на машины без интернета. может потому и не сталкивался.


              1. Mingun
                22.02.2019 19:07

                Установщик работает паралельно. можно хоть еще одну студию установить.

                Возможно, уже починили. Когда я столкнулся с необходимостью, студия при запуске ругалась. Впрочем, может, это было связано с тем, что к тому времени она была слегка «поломана».


                но похоже оно решается запуском без интернета (что офлайн и подразумевает на самом деле)

                Не совсем. Офлайн подразумевает, что из интернета ничего качать не надо (потому что он может быть медленным или дорогим или и тем и другим сразу, да мало ли причин) – бери оттуда, откуда тебе указали. Да, докачивать «недостающее» не надо. Обновления тоже. Даже критические. Да, я понимаю, что всё страшно устарело, не надо. Нет, я не странный.


                Хорошо, если проблему можно решить, отрубив интернет, но ведь именно с этого обсуждение и началось: это не удобно.


                1. zartarn
                  22.02.2019 19:28

                  Хорошо, если проблему можно решить, отрубив интернет, но ведь именно с этого обсуждение и началось: это не удобно.

                  Кому как. Да и политика у них такая что все теперь всегда обновляется (забыл как называется данная модель распространения без как таковых релизов).
                  Можно сделать батник который и установит через консольную версию именно те пакеты что до этого были скачаны.
                  Политика все больше сдвигается в сторону от нас. ну а хочется гибкости — теперь чуть больше действия надо.
                  Увы. Альтернативы нет.