È possibile forzare un assembly di interoperabilità a fare riferimento a una copia locale della DLL COM associata?Forza .NET Interop per utilizzare la DLL COM locale
Ecco lo scenario:
Ho un'applicazione .NET che fa riferimento a un assembly di interoperabilità (Interop.OTAClient.dll), che è l'interoperabilità per una DLL COM (OTAClient.dll, che è l'API di automazione per HP Quality Center). Non sono molto ben informato su COM, ma, a quanto ho capito, l'assembly di interoperabilità cerca le classi COM tramite i riferimenti GUID nel registro, piuttosto che puntare a un file specifico.
Il problema è che la copia di OTAClient.dll che le chiavi del Registro di sistema puntano a viene sovrascritta da versioni diverse a seconda di quale versione di QC ho appena effettuato l'accesso in un browser e le diverse versioni di queste DLL non sono compatibili tra loro. L'app .NET si collegherà solo a una versione specifica di QC, quindi non posso avere la DLL COM che varia in questo modo.
Qualsiasi suggerimento sarebbe molto apprezzato, in quanto questo comportamento è davvero irritante. Ho visto altre domande sui problemi di interoperabilità di COM, ma sembra che si tratti di forzare una versione locale della DLL di interoperabilità da utilizzare invece di una nella GAC, piuttosto che questo particolare scenario che riguarda la DLL COM effettiva.
Ciao Pavel. Grazie per il collegamento: ho seguito l'esempio e VS ha generato la voce manifest per OTAClient come previsto.Tuttavia, vedo ancora gli stessi sintomi se la versione più recente della DLL è stata utilizzata per ultima dall'app browser che utilizza anche quella DLL. Pensi che sia possibile che OTAClient abbia le sue dipendenze che vengono anche sovrascritte con le nuove versioni? Se sì, qualche suggerimento su come potrei gestirlo? – Xiaofu
Potrebbe essere possibile che tali dipendenze siano esse stesse componenti COM. In tal caso, dovresti gestirli in un modo simile (in modo da ottenere una serie di librerie autosufficienti). –