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

У меня есть DLL смешанного режима, встроенная в Visual Studio 2005. В средстве обхода зависимостей моя DLL показывает зависимость следующих библиотек CRT. Обратите внимание, что это на моем компьютере для разработки 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 с последней установленной ЭЛТ.

Когда я перетаскиваю DLL в средство обхода зависимостей на компьютере с 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 разных версии, на которые она нацелена...

1 ответ

Решение

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

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

Другие вопросы по тегам