Per file di configurazione dell'applicazione bindingRedirect non si applica alle DLL
Domanda
Ho creato una semplice applicazione Win32 per dimostrare Uxtheme su XP includendo una dipendenza manifesta sul ver 6 commctl32.dll
Poi ho creato una semplice DLL Win32, costruito con ISOLATION_AWARE_ENABLED
, e provato con un manifesto incorporato specificando sia la versione 5 e 6 della Comctl32.dll
ho ottenuto con successo l'exe e dll di utilizzare diverse versioni di Comctl32.dll utilizzando questo metodo. Sia con l'exe con 5 e la versione dll 6, e viceversa.
Poi, ho ripristinare l'applicazione e la DLL di avere un comctl ver 5 dipendenze manifesto. E ha introdotto un file di configurazione dell'applicazione:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<windows>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df"/>
<bindingRedirect oldVersion="5.82.7100.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</windows>
</configuration>
Ora, quando faccio funzionare la mia applicazione, le applicazioni è chiaramente di essere reindirizzato al commctl v6 - dialoghi sono chiaramente visualizzati utilizzando il XP UXTheme abilitato. Tuttavia, la dll non viene reindirizzato e sta usando il tema non ver 5 di commctl.
Non si parla di file di configurazione per-dll per fare bindingRedirects nella documentazione. E cercando di crearne uno non fa nulla.
Lo faccio anche che facendo un bindingRedirect da una versione principale di un assembly per un altro non è uno scenario supportato, ma Im davvero solo usando commctl32 come un modo semplice ovvio per testare la meccanica.
Come faccio a reindirizzare la versione di un assembly dipendente di una dll?
Soluzione 2
Così, questa domanda è stato risposto.
- Ho usato Process Monitor per monitorare l'accesso ai file,
- Dopo aver realizzato che accede al manifest ei file config vengono dal csrss.exe NON mio processo,
- e Windows Vista non sarà nemmeno accedere manifest o config file che vengono aggiunti in seguito come si memorizza nella cache la loro esistenza con un timbro di data e ora per l'exe.
Dopo tutto quello che ho scoperto che LoadLibrary non sonda per un file .config durante il caricamento di DLL:
full_path_to_dll\dllname.dll.2.config
redirect obbligatorio in questo file saranno trattati.
Altri suggerimenti
E Windows Vista non sarà nemmeno accedere ai file manifest o .config che sono aggiunto in seguito come si memorizza nella cache la loro esistenza con un data-ora francobollo per l'exe.
Ho trovato che la registrazione off / on sembra per cancellare il trigger il file di configurazione da leggere di nuovo.