Предварительные требования для распространяемых файлов 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.