Я работаю с VS2010 над проектом, который использует Havok, а в последнем выпуске есть только VS2008 и более ранние двоичные файлы. Встроенный манифест, созданный VS, содержит следующие
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Поскольку очевидно, что VS больше не использует параллельные сборки (исходный код), начиная с 2010, в моем каталоге winsxs не установлены отладочные сборки 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.
(он прекращает поиск и может разрешить ссылку, но создание контекста по-прежнему не удается)
Единственное, что работает, - это отключение генерации встроенного манифеста. Есть ли другой способ решить эту проблему?