2012-11-13 9 views
7

Stiamo sviluppando un componente aggiuntivo per Autodesk Inventor. Il nostro software è un insieme di assembly di DLL caricati in Inventor in fase di runtime. Abbiamo deciso di utilizzare Microsoft Enterprise Library 5.0 per la registrazione e la gestione delle eccezioni.Diverse versioni di Enterprise Library in un unico processo

Ora abbiamo un problema, perché risulta che Inventor 2013 utilizza Enterprise Library 4.1. Quando il nostro componente aggiuntivo si sta caricando, non riesce a caricare la versione corretta di un assembly, perché Inventor ha già una versione precedente nella sua directory Bin.

opzioni che abbiamo considerato finora:

  1. Durante la distribuzione del nostro prodotto, sovrascrivere le vecchie librerie nella cartella Bin di Inventor
  2. Usa EL 4.1 nelle nostre assemblee

Entrambi sono cattivi e Sto esaurendo le idee, quindi sto chiedendo aiuto.

L'opzione 1 solleva questa domanda: la libreria Enterprise è retrocompatibile e sostituirà quelle DLL nella cartella Bin causando problemi? L'ho provato, Inventor non si lamenta e funziona come previsto (non ho controllato la funzionalità EL).

L'opzione 2 ci consente di utilizzare la versione precedente e ci associa alla versione che Autodesk utilizza, quindi dovremmo osservare quando eseguono l'aggiornamento, soprattutto quando rilasciano una nuova versione di Inventor.

Qual è la migliore pratica in questo scenario?

UPDATE:
Abbiamo risolto questo da solo mettendo la versione più recente di Enterprise Library in GAC. Penso che quello che è successo qui sia che .NET abbia provato a caricare prima la versione precedente (perché era più alta nell'ordine di ricerca degli assembly) e dopo aver fallito non è mai andato oltre per cercare la versione corretta. Quando è in GAC, risolve correttamente.

+1

Avete considerato sovrascrivere le DLL e quindi utilizzando un legame reindirizzamento nel file di configurazione per il punto (s) la voce? – casperOne

+0

A mio avviso, il reindirizzamento sarebbe un passaggio obbligato se optassimo per l'opzione 1. Ciò significa che non stiamo solo sovrascrivendo le DLL installate da Inventor, ma anche modificando il suo file di configurazione. Non mi piace molto questa soluzione, ma non sembra che abbiamo un'altra via d'uscita. Tuttavia, la domanda rimane: la libreria Enterprise è retrocompatibile abbastanza per tali reindirizzamenti? – jur

risposta

4

Da quello che posso vedere, una soluzione ragionevole sarebbe incorporare gli assembly e accedervi utilizzando la classe ResourceManager, questo consentirebbe di utilizzare le versioni più recenti pur mantenendo il meccanismo di registrazione dei progetti principali.

Si può trovare questa domanda utile: Embedding assemblies inside another assembly

+0

Grazie. Non sapevo che puoi farlo. Sarà utile per il futuro, ma ho già una soluzione per questa domanda. Ho intenzione di aggiornare il post. – jur