Бинарная компиляция для VS2008 требует параллельной сборки DebugCRT, не работает в VS2010 - PullRequest
10 голосов
/ 29 мая 2011

Я работаю с VS2010 над проектом, который использует Havok, и в последней версии есть только VS2008 и более ранние двоичные файлы.Встроенный манифест, сгенерированный VS, содержит следующее

<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

Поскольку, очевидно, VS больше не использует параллельные сборки ( source ), начиная с 2010 года, в моем каталоге winsxs нетустановленные сборки debug crt, а распространяемый пакет vs не устанавливает отладочные версии.Если мы скомпилируем dll, использующие Havok, со встроенным манифестом, приложения, загружающие dll, не запустятся.

Я запустил sxstrace и получил следующее:

INFO: Begin assembly probing.
INFO: Did not find the assembly in WinSxS.
INFO: Attempt to probe manifest at G:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT.MANIFEST.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST.
INFO: Did not find manifest for culture Neutral.
INFO: End assembly probing.
ERROR: Cannot resolve reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8".
ERROR: Activation Context generation failed.
End Activation Context Generation.

Приложения работают на одном измашины моего коллеги, поскольку (предположительно) на нем был установлен VS2008, но не на другом или моем, так как у нас был только VS2010.Единственными файлами debugcrt, которые рабочая машина имеет в каталоге winsxs, являются

x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb

как папка с dll, файлом .manifest и файлом .cat (тот же publicKeyToken, но другая версия)

Я пытался скопировать файлы в каталог winsxs, но это не помогло.Помещение dll непосредственно в каталог с двоичными файлами также ничего не сделало.Помещение файлов в bin\Microsoft.VC90.DebugCRT.DLL (так как это был один из каталогов, которые искали в соответствии с sxstrace) также не помогло, но вывод из sxstrace изменился на

INFO: Begin assembly probing.
INFO: Did not find the assembly in WinSxS.
INFO: Attempt to probe manifest at G:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT.DLL.
INFO: End assembly probing.
ERROR: Activation Context generation failed.

(он останавливает поиск и можетразрешить ссылку, но генерация контекста все равно не удалась)

Единственное, что работает, - отключение генерации встроенного манифеста.Есть ли другой способ решить эту проблему?

1 Ответ

1 голос
/ 03 августа 2012

На рабочем компьютере найдите в папке:

C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ redist \ Debug_NonRedist \ x86 \ Microsoft.VC90.DebugCRT

Это место, где находятся библиотеки времени исполнения нужной версии.Там также есть файл манифеста.Вы можете посмотреть в средстве просмотра событий (eventvwr.exe), чтобы увидеть, какую версию DLL ищет exe-файл, а затем вы можете изменить файл манифеста (вернее, изменить копию, которую вы помещаете в исполняемый каталог с помощью dll)поэтому он идентифицирует включенные файлы как эту версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...