Come posso risolvere la dipendenza CRT causando un FileLoadException con il mio vc2005 modalità mista DLL su XP?

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

Domanda

Ho una DLL in modalità mista integrato in Visual Studio 2005. Nel Dependency Walker, il mio DLL sta mostrando una dipendenza dei seguenti DLL CRT. Nota: questo è sulla mia macchina Windows 7 sviluppo.

c: \ windows \ winsxs \ x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 \ msvcp80.dll

"\ Msvcr80.dll

"\ Msvcm80.dll

8.0.50727.4927

Il mio Windows 7 macchina dev utilizzando Visual Studio 2005 In questo compila e funziona bene. il problema è è solito eseguito sulla mia macchina di prova di Windows XP con l'ultimo CRT installato.

Quando ho trascinare la DLL in depenency camminatore sulla macchina di XP sembra essere alla ricerca delle DLL in \ System32 ... (sono andato a mostrare il percorso completo e non c'era nessun percorso per loro, solo un punto esclamativo giallo)

Il problema è che questa versione (costruzione 4927) del CRT in WinSxS non è installato sulla macchina di prova XP. si dispone di Visual Studio 2005 con l'ultima versione di CRT (SP1?).

8.0.50727.4053 è la versione più recente che ho trovato su MSDN.

Mi rendo conto che questo non è il più emozionante domanda pubblicata sul SO, ma qualcuno sa che cosa è con questo 4927 runtime?

* Modifica *

Il manifesto generato da 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>

Quindi, non v'è 3 versioni differenti momento che riguarda la ...

È stato utile?

Soluzione

Revisione 4927 è una versione specifica di Windows 7, probabilmente utilizzato dai file binari di Microsoft. La build non dovrebbe creare una dipendenza su di esso, 4053 è l'ultima per VS2005. Non risolvere questo con Depends.exe btw, non è bravo a monitoraggio WinSxS dipendenze.

Inizia la risoluzione di questo con un doppio controllo quanto la dipendenza la build genera. Primo sguardo in VC \ include \ crtassem.h, la macro _CRT_ASSEMBLY_VERSION genera la voce manifesto. Successivo è quello di verificare il manifesto che è incorporato nel file eseguibile. directory di rilascio del progetto contiene il file .embed.manifest che è stato incorporato. E File + Open + file a vostro eseguibile permette di sbirciare al reale risorsa RT_MANIFEST incorporato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top