Question

J'ai un projet qui comprend des modules de pré-construction dll, construit un certain temps dans le passé, en utilisant Visual Studio 9.

Le EXE du projet est construit maintenant, en utilisant SP1 de Visual Studio 9.

Lorsque nous déployons l'EXE nous ne voulons pas besoin d'un accès administratif, de sorte que le C-Runtime a été livré dans la racine de l'application. Les dll: MSVCRT90.DLL et leur manifeste: Microsoft.VC90.CRT.manifest

Maintenant, le fichier EXE et les dernières versions des manifestes d'exécution sont tous d'accord - le manifeste d'application demande 9.0.30729.1 de msvcrt.dll et le crt-manifeste contient les entrées confirmant que msvcrt90.dll est une version 9.0.30729.1

Maintenant, un problème. Une bibliothèque de DLL 3ème partie utilisé par notre application était lié avec la version originale msvcrt90.dll 9.0.21022.8 et a un manifeste interne à cet effet.

Sur nos PC de développement où les deux versions du VS9 CRuntime ont été installés les travaux d'application. Sur les PC « frais » où nous installons l'application pour la première fois - la DLL ne parvient pas à charger

.

Maintenant, j'ai quelques tricheurs que je peux faire - on est de revenir à l'application 9.0.2 - 9.0.2 obtenir les DLL hors média source d'origine. Ceci est indésirable en 9.0.3 est préférable. Ou j'essaie vraiment difficile d'obtenir une reconstruction de la bibliothèque 3ème partie.

Je suis en outre à peu près certain que, sur nos PC de développement, lorsque la bibliothèque 3ème partie demande l'ancien dll, il est redirigé vers la nouvelle dll - ils sont binaires compatibles

.

Application des manifestes et des assemblées devaient nous sauver de ce genre de déchets. Il doit être possible de modifier l'ensemble des fichiers manifestes de sorte que le dll et peuvent exe charger.

Était-ce utile?

La solution

Je ne l'ai jamais essayé, mais je pense que vous pouvez résoudre qu'avec bindingRedirect dans le manifeste, je sais que cela fonctionne dans le monde géré.

Voir l'exemple (Vous devrez modifier les valeurs de votre version)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
  <windows>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <assemblyIdentity name="Your.Application.Name" type="win32" version="9.0.0.0"/>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" />
        <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30411.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" />
        <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30411.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.MFCLOC" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
        </assemblyIdentity>
        <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30411.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </windows>
</configuration>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top