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

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

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

"\ MSV80.DLL.DLL" MSVCR80.DLL*

8.0.50727.4927

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

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

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

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

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

* EDIT *

Манифест, сгенерированный 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 Ответ

1 голос
/ 16 ноября 2010

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

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

...