Correction d’une application existante à l’aide d’un assembly privé

À compter de Windows XP, vous pouvez créer un assembly privé et le mettre à la disposition d’une application spécifique. Cette fonctionnalité peut être utilisée pour corriger une application qui devient incompatible avec une mise à jour. Par exemple, une application qui devient incompatible avec la dernière version de MSVCRT.DLL après la mise à niveau du système d’exploitation. Dans ce cas, vous n’avez pas la possibilité de remplacer la version système, car MSVCRT.DLL est un fichier protégé par Windows. Au lieu d’avoir à réécrire l’application pour qu’elle fonctionne avec la nouvelle version de MSVCRT, vous pouvez créer un assembly privé pour MSVCRT et l’installer dans votre dossier d’application. Notez que tous les composants partagés ne sont pas des candidats appropriés pour un assembly côte à côte privé, et que certains composants ont des restrictions de licence sur l’emplacement où leurs composants peuvent être installés. Le composant doit répondre aux critères d’un composant côte à côte. Demandez à l’éditeur du composant s’il peut fournir un assembly approprié.

Le manifeste de l’assembly privé et le manifeste de l’application doivent tous deux être installés dans le même dossier que l’exécutable de l’application. Lorsque l’application s’exécute, elle consulte le manifeste de l’application et charge la version de MSVCRT privée à l’application.

Pour cet exemple, l’assembly privé inclut à la fois MSVCRT.DLL et MSVCIRT.DLL comme dans le manifeste d’assembly suivant :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32"
      name="Microsoft.Windows.PrivateCPlusPlusRuntime" 
version="6.0.0.0" 
processorArchitecture="x86"/>
    <file name="msvcrt.dll"/>
    <file name="msvcirt.dll"/>
</assembly>

Voici un exemple de manifeste d’application possible.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="x86" 
    name="APPLICATION" 
    type="win32" 
/> 
<description>Description of Application</description> 
<dependency> 
    <dependentAssembly> 
       <assemblyIdentity 
           type="win32"
           name="Microsoft.Windows.PrivateCPlusPlusRuntime" 
           version="6.0.0.0" 
           processorArchitecture="x86"/> 
    </dependentAssembly> 
</dependency> 
</assembly>