Предварительные требования для распространяемых файлов VC++ 2010 и VC++2012 для проекта установки Visual Studio 2015

У меня установлена ​​Visual Studio 2015, и я создал приложение.NET 4.6, которое зависит от некоторых сторонних сборок.NET, которые зависят от некоторых C++ DLL и EXE, которые, в свою очередь, зависят от распространяемого пакета Visual C++ 2012 x64. SDK, который я использую, включает в себя несколько модулей слияния, которые развертывают сборки SDK.NET и C++, от которых я зависит (но не среды выполнения Visual C++).

Если распространяемый пакет Visual C++ 2012 не установлен на целевом компьютере, мое приложение.NET 4.6 аварийно завершает работу при запуске, говоря Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'MyManagedDependency.dll' or one of its dependencies. The specified module could not be found. Это происходит, даже когда у меня установлены распространяемые файлы Visual C++ 2015 в целевой системе. Таким образом, похоже, что зависимость времени выполнения C++ не совместима с предыдущими и последующими версиями.

Я использую проект установки Visual Studio 2015, чтобы создать установщик для моего приложения. Однако список предварительных условий для установки, из которых я могу выбрать, не включает библиотеки времени выполнения Visual C++ 2012. Единственные библиотеки Visual C++, которые я могу выбрать в качестве предварительных условий для проекта установки, - это "Visual C++ "14" Runtime Libraries". Я считаю, что это то же самое, что и распространяемый пакет Visual C++ 2015, которого недостаточно для загрузки моего программного обеспечения.

Есть ли способ добавить среду выполнения Visual C++ 2012 в список предварительных требований для моего установщика проекта установки VS2015 (например, путем установки большего количества SDK)? Или есть другой способ упаковки среды выполнения C++ 2012 в моем установщике?

РЕДАКТИРОВАТЬ: копаясь в пакете документации и установщика стороннего SDK, который я использую, похоже, что мое приложение на самом деле может работать правильно, только если в целевой системе присутствуют распространяемые файлы Visual C++ 2010 и 2012. Также мне может понадобиться установить обе версии x86 и x64. Я не думаю, что смогу установить все эти модули слияния, так как на этой странице написано:

Мы рекомендуем вам не использовать модули слияния, за исключением случаев, когда вам не нужно обслуживать ваше приложение, и у вас нет зависимости более чем от одной версии DLL. Модули слияния для разных версий одной и той же DLL не могут быть включены в один установщик, а модули слияния затрудняют обслуживание DLL независимо от вашего приложения. Вместо этого мы рекомендуем вам установить распространяемый пакет Visual C++.

Как добавить эти старые распространяемые файлы в качестве предварительных условий для моего проекта установки VS2015?

1 ответ

Несколько часов спустя я обнаружил, что, безусловно, можно добавлять элементы в диалоговое окно "Предварительные условия проекта установки Visual Studio 2015".

Объединение этого ответа с обновленным путем Bootstrapper VS2015 (\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages) из этой статьи MSDN позволит достичь этой цели.

Однако это оставило бы меня с проектом установки, который собирался бы правильно только в довольно сильно настроенной среде сборки, которую было бы сложно воспроизвести на новых машинах. Я не нашел простой в установке надстройки VS или пакета MS, который бы добавил эту поддержку.

В конце концов, подход, который я сейчас использую, заключается в добавлении следующих модулей слияния MS в мой проект установки:

  • Microsoft_VC110_CRT_x86.msm
  • Microsoft_VC110_CRT_x64.msm
  • Microsoft_VC120_CRT_x86.msm
  • Microsoft_VC120_CRT_x64.msm

Это приводит к тому, что исполняемые библиотеки DLL развертываются в C:\Windows\System32 и C:\Windows\SysWOW64, и они, похоже, работают. Это не приводит к появлению распространяемого пакета в диалоговом окне "Программы и компоненты" Windows.

Однако, поскольку MS рекомендует не использовать этот метод развертывания сред выполнения, я открыт для любого более простого в обслуживании метода упаковки "истинного" VC++ 2010 и VC++ 2012, распространяемого вместе с моим проектом установки VS2015.

Другие вопросы по тегам