C ++ / CLI отсутствует MSVCR90.DLL - PullRequest
9 голосов
/ 08 июня 2010

У меня есть c ++ / cli dll, который я загружаю во время выполнения и который прекрасно работает в режиме отладки. Если я пытаюсь загрузить DLL в режиме выпуска, он не может загрузить, заявив, что одна или несколько зависимостей отсутствуют. Если я бегу, зависит от этого, я скучаю по MSVCR90.DLL из MSVCM90.DLL. Если я проверяю отладочную версию DLL, она также имеет отсутствующую зависимость, но от версии отладки (D).

Я убедился, что отладка / выпуск вставили файл манифеста. Я прочитал кое-что о проблемах с приложением, загружающим сборку dll как Любой ЦП и сборку dll как x86, но я не вижу, как установить их обоих на x86.

Я использую VS2010.

Во всяком случае, я уже некоторое время бездельничаю и понятия не имею, что не так. Я уверен, что кто-то там знает, что происходит. Дайте мне знать, если мне нужно будет включить дополнительную информацию.

альтернативный текст http://www.freeimagehosting.net/uploads/fb31c0e256.png

UPDATE:

Это в конечном итоге стало решением моей проблемы: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/07794679-159b-4363-ae94-a68fe258d827

Ответы [ 2 ]

10 голосов
/ 08 июня 2010

MSVCR90 - среда выполнения для Visual Studio 2008 . Если вы запускаете свое приложение на ПК для разработки, то у вас должны быть установлены среды выполнения отладки и выпуска (как часть Visual Studio), но, возможно, что-то пошло не так с вашей установкой, или что VS2010 на самом деле не включает более старую версию Время автономной работы. Если вы пытаетесь запустить Релиз на другом ПК, ему просто нужно установить среду выполнения.

В любом случае, вы можете исправить это, установив распространяемый Visual Studio 2008 , но убедитесь, что вы получаете нужную загрузку для своего ПК (x86 или x64).

В предыдущих версиях VS вам требовалась среда выполнения для версии, с которой вы компилировали, поэтому, если VS2010 следует этому прецеденту, вам понадобится MSVCR100, а не MSVCR90 - что предполагает, что вы, возможно, не перекомпилировали dll с VS2010 - выполняя так же может быть и другой подход к запуску его на вашем ПК (с использованием redist, который есть в вашей установке VS2010), но имейте в виду, что вам все же понадобятся другие пользователи для установки соответствующего (VS2010) распространяемого на их ПК.

Что касается «Любого ЦП» по сравнению с «x86», то это проблема только на 64-битном компьютере. В этих системах 64-разрядное приложение не может динамически связываться с 32-разрядными библиотеками. Если вы скомпилируете свое приложение как «Любой ЦП», оно будет скомпилировано в JIT, чтобы быть 64-битным в 64-битной ОС, поэтому произойдет сбой, если оно попытается напрямую вызвать любые 32-битные dll. Решение заключается в создании приложения, ориентированного на «x86», так как это заставляет JIT-компилятор генерировать 32-битный код (даже на 64-битной машине) и, таким образом, обеспечивает совместимость с DLL, которую вы хотите вызвать. Если DLL является управляемой сборкой, то вы можете использовать любой ЦП в обоих приложениях и DLL, поскольку они оба будут JITted в один и тот же формат.

1 голос
/ 25 марта 2013

У меня случилось нечто подобное при запуске веб-сайта в Vistual Studio 2012 после перехода с Visual Studio 2010. В сообщении об ошибке говорилось, что MSVCR90.DLL отсутствует.Решение было следующим: 1) Удалите папку _bindeployable, расположенную в пути проекта.2) Перестройте.

Надеюсь, это поможет.

...