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