Condividi tramite


Correzione di un'applicazione esistente tramite un assembly privato

A partire da Windows XP, è possibile creare un assembly privato e renderlo disponibile per un'applicazione specifica. Questa funzionalità può essere usata per correggere un'applicazione incompatibile con un aggiornamento. Un esempio è un'applicazione che diventa incompatibile con la versione più recente di MSVCRT.DLL dopo l'aggiornamento del sistema operativo. In questo caso, non è possibile sostituire la versione di sistema perché MSVCRT.DLL è un file protetto da Windows. Invece di dover riscrivere l'applicazione per usare la nuova versione di MSVCRT, è possibile creare un assembly privato per MSVCRT e installarlo nella cartella dell'applicazione. Si noti che non tutti i componenti condivisi sono un candidato adatto per un assembly side-by-side privato e alcuni componenti hanno restrizioni di licenza sulla posizione in cui è possibile installare i componenti. Il componente deve soddisfare i criteri per un componente affiancato. Chiedere all'editore del componente se può fornire un assembly appropriato.

Il manifesto dell'assembly privato e il manifesto dell'applicazione devono essere entrambi installati nella stessa cartella del file eseguibile dell'applicazione. Quando l'applicazione viene eseguita, consulta il manifesto dell'applicazione e carica la versione di MSVCRT privata per l'applicazione.

Per questo esempio, l'assembly privato includerà sia MSVCRT.DLL che MSVCIRT.DLL come nel manifesto dell'assembly seguente:

<?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>

Di seguito è riportato un esempio di un possibile manifesto dell'applicazione.

<?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>