Sto sviluppando un'applicazione desktop in .Net che segue un'architettura di plugin, qualcosa del genere: -
Ho una soluzione "core" .Net, contenente il progetto desktop exe e una manciata di progetti di librerie di classi. Queste classi forniscono tutti i tipi di funzionalità condivise / comuni e sono referenziate dall'exe dell'applicazione e dai singoli moduli.
Ogni modulo vive nella propria soluzione .Net. La soluzione ha la sua copia delle DLL della libreria condivisa sopra indicate come riferimento del / i progetto / i del modulo.
L'installazione per l'utente finale richiede solo la distribuzione del core exe & DLL, insieme alle DLL dei moduli richieste in quel sito, in una cartella. Non ho alcun problema con il meccanismo utilizzato dal core exe per "scoprire" quali moduli sono presenti, quindi caricare & inizialo.
Le mie preoccupazioni riguardano la gestione e la distribuzione delle DLL. In un mondo ideale dovrei essere in grado di apportare una modifica al "modulo X" e ridistribuire solo le DLL di quel modulo. Tuttavia è possibile che una modifica possa anche comportare l'aggiornamento di una delle librerie condivise. Quando si ridistribuiscono queste DLL aggiornate, la funzionalità della libreria condivisa aggiornata potrebbe interrompere altri moduli (o anche l'exe dell'applicazione) che fanno riferimento a esso. Immagino che cosa dovrei fare in questo scenario è ricostruire / ridistribuire tutte soluzioni, non solo "modulo X".
Un approccio più semplice può essere quello di trattare il "core" e tutti i moduli come un singolo prodotto e ridistribuire tutto in ogni versione, anche se si tratta solo di una modifica a un modulo. Ma sembra che perderei uno dei vantaggi dell'architettura di un plugin: dovrei essere in grado di rilasciare una nuova versione di un modulo in isolamento.
Qualche idea? O questi problemi di referenziazione di DLL sono una parte inevitabile dell'utilizzo di un'architettura di plugin?