Как мне исправить зависимость CRT, вызывающую исключение FileLoadException с моей библиотекой DLL смешанного режима vc2005 в XP?

StackOverflow https://stackoverflow.com/questions/4196030

Вопрос

У меня есть библиотека DLL смешанного режима, встроенная в Visual Studio 2005.В dependency walker моя библиотека DLL показывает зависимость от следующих CRT-библиотек DLL.Обратите внимание, что это на моем компьютере для разработки Windows 7.

c:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCP80.DLL

"\MSVCR80.DLL

"\MSVCM80.DLL

8.0.50727.4927

На моем компьютере для разработчиков Windows 7, использующем Visual Studio 2005, это компилируется и работает просто отлично.проблема в том, что он не будет запускаться на моем тестовом компьютере с Windows XP с установленной последней версией CRT.

Когда я перетаскиваю библиотеку DLL в depenency walker на компьютере XP, кажется, что она ищет библиотеки DLL в \System32...(Я перешел к показу полного пути, но там не было путей для них, только желтый восклицательный знак)

Проблема в том, что эта версия (сборка 4927) crt в WinSxS не установлена на тестовой машине XP.в нем установлена Visual Studio 2005 с последней версией CRT (sp1?).

8.0.50727.4053 это последняя версия, которую я смог найти в MSDN.

Я понимаю, что это не самый волнующий вопрос, опубликованный на SO, но кто-нибудь знает, что происходит с этой средой выполнения 4927?

* Редактировать *

Манифест, сгенерированный MT.exe:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Итак, существует 3 различные версии, на которые он нацелен...

Это было полезно?

Решение

Редакция 4927 - это специфичная для Windows 7 версия, вероятно, используемая двоичными файлами Microsoft.Ваша сборка не должна создавать зависимость от нее, 4053 является последней для VS2005.Не устраняйте это с помощью depends.exe кстати, он не очень хорош для отслеживания зависимостей winsxs.

Начните устранять неполадки, дважды проверив, какую зависимость генерирует ваша сборка.Сначала посмотрите в vc\include\crtassem.h, макрос _CRT_ASSEMBLY_VERSION генерирует запись манифеста.Далее необходимо проверить манифест, встроенный в ваш исполняемый файл.Каталог выпуска вашего проекта содержит файл .embed.manifest, который был внедрен.И File + Open + Файл в вашем исполняемом файле позволяет вам заглянуть в фактический встроенный ресурс RT_MANIFEST.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top