2013-06-02 7 views
5

У меня есть проект C++/CLI, созданный в VS2005. Я надеюсь запустить это в VS2010 (или 2012), так как это моя основная IDE и Мне также нужно изменить некоторые вещи в проекте C++/CLI, и его раздражение должно переключаться назад и вперед на vs2005 для перекомпиляции , копия и т. д. Другая важная причина - мои проекты, работающие в VS2010/2012, находятся в .NET4, поэтому нет возможности переместить все на VS2005.запустить проект vs2005 C++ в более поздней версии визуальной студии

Проект имеет зависимость от неуправляемых сторонних библиотек, которые сами имеют зависимость от отладочных версий C++ Redistributable библиотек (msvcr80.dll, msvcm80.dll, msvcp80.dll)

Когда я первый побежал модернизированный проект Я получил «указанный модуль не может быть найден» -

Именно тогда я заметил, что проект кли компилируется против поздних версий MSVC (msvcr90.dll)

зависимости кли сборки, как в зависимости; VS2005 слева против 2008 на правой

enter image description here

Есть ли способ, чтобы сделать более поздней версии VS компилировать с использованием библиотек 2005?

обновление его не витал один компилирует против (и не может быть возможно в любом случае), но можно запускать и отлаживать как бок о бок? Когда я пытаюсь запустить скомпилированный проект, я получаю сообщение об ошибке:

enter image description here

Я попытался скопировать файл манифеста из VS2005 проекта к проекту VS2010, но это не работает (то же самое сообщение об ошибке) , Я также отключил встроенный манифест и заменил сгенерированный файл .manifest на файл vs2005, и это тоже не сработает.

Update2 Я миновал эту ошибку, указав библиотеки msvcr в манифесте:

<dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 

однако теперь, когда я запускаю мое приложение один из сторонних библиотек бросает AccessViolationException - Attempted to read or write protected memory, когда я пытаюсь используйте один из методов. Этот код отлично работает в vs2005.

+0

downvoter Pls объяснить? – wal

+0

Как правило, это не проблема, когда разные части приложения зависят от VC 2005 и 2008. Для запуска такой программы должны быть установлены библиотеки времени исполнения. –

+0

и для работы в контексте визуальной студии, то есть отладки? – wal

ответ

4

С тех пор я обнаружил Daffodil for Visual Studio, который делает именно то, что мне нужно, а именно компилируется против vc80 в visual studio 2010.После установки в раскрывающемся списке Platform Toolset есть еще несколько опций:

nb, вы все равно должны иметь соответствующую версию Visual Studio, например, если для таргетинга vc80 вам нужен vs2005. nb2, Intellisense is broken в VS2010 для Cli/C++, который является одним из основных разочарование после того, как количество времени, исследуя получение проекта для работы на VS2010

enter image description here

+0

+1 приятный поиск! –

0

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

См: Problem loading RT without Manifest

0

От http://www.davidlenihan.com/2007/07/winsxs.html

«Так как же приложение знает, что версия DLL он должен загрузить Это где?„Манифест“вступает в игру манифест является XML. файл, содержащий информацию, используемую для создания каталога в C: \ Windows \ winsxs, чтобы можно было загрузить определенную DLL. "

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