2

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

Если распространяемый объект 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 для создания программы установки для своего приложения. Тем не менее, список установщиков Предпосылки, которые я могу выбрать, не включают библиотеки Runtime Visual C++ 2012. Единственными библиотеками Visual C++, которые я могу выбрать в качестве предварительных условий проекта, являются «Visual C++» 14 «Runtime Libraries». Я считаю, что это то же самое, что и Redibbibable для Visual C++ 2015, чего недостаточно для загрузки моего программного обеспечения.

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

EDIT: Рытье через установщик пакет сторонней SDK Я использую документацию &, похоже, мое приложение может реально работать только правильно, если как Visual C++ 2010 и 2012 распространяемых присутствуют на мишени система. Также мне может потребоваться установить как x86, так и x64 версии. Я не думаю, что я могу установить все те, с модулями слияния так this page says:

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

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

+0

Возможно, я не общался, потому что я не эксперт по установке C++ или Windows. Установка SDK корректно устанавливает предварительные условия времени выполнения на машине разработчика, как часть установщика SDK. Я хочу распространять свое приложение, которое * использует * SDK, не требуя установки самого SDK на компьютере конечного пользователя. Так что все, что мне нужно, это время выполнения C++ для предварительного пакета для моего собственного пакета установщика (вместе с модулями слияния, которые я уже установил). Я не уверен, почему этого не удалось достичь с помощью проектов VS 2015 Setup? – Hydrargyrum

+0

Я тоже не уверен, вам просто нужно скопировать библиотеки DLL в каталог установки. Не следует принимать больше, чем msvcr100.dll и msvcr110.dll, но если вы не можете понять, какие другие DLL вам нужны, спросите автора SDK. –

+0

Мои предыдущие поисковые запросы не должны иметь правильных ключевых слов. Это выглядит актуальным: http://stackoverflow.com/questions/15619728/vs2010-setup-project-with-c-2008-redistributables – Hydrargyrum

ответ

1

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

Объединение this answer с обновленной версией Bootstrapper VS2015 (\ Program Files (x86) \ Microsoft Visual Studio 14.0 \ SDK \ Bootstrapper \ Packages) от this MSDN article достигнет этой цели.

Однако, это оставило бы меня с проектом установки, который будет строиться правильно только в довольно сильно настраиваемой среде сборки, что было бы сложно воспроизвести на новых машинах. Я не нашел простую в установке 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.

 Смежные вопросы

  • Нет связанных вопросов^_^