Caricamento di un assieme / modulo in un assieme dinamico
-
13-12-2019 - |
Domanda
Ho un assembly che è già stato creato, diciamo Static.dll
, e un assembly dinamico che sto creando in fase di runtime, diciamo Dynamic
. Dynamic
crea del codice IL da cui creare un nuovo tipo Static.dll
.Quando Dynamic
viene creato (salva con successo), l'eseguibile, quando viene eseguito, si verifica un errore perché non è in grado di caricare l'assembly Static.dll
tipo.Credo che questo stia accadendo dal momento che il Dynamic
l'output exe non riesce a trovare questa dll (o almeno questa è la mia ipotesi).
Come può realizzare l'aggiunta in questo Static.dll
riferimento in modo che quando qualcuno esegue l'output eseguibile risultante di Dynamic
che possa trovare i tipi di riferimento?
Lo so Assembly.Load()
, ma questo da solo non cambia niente.O almeno, non sono sicuro di cosa mi dia questo dato che non ho bisogno di usare il tipo in fase di esecuzione, ma piuttosto quando eseguo il Dynamic
eseguibile.
Infine, controllo il Static.dll
, quindi se c'è qualcosa che posso fare con il progetto per risolverlo, potrebbe essere fatto, tuttavia, deve rimanere separato, non voglio emettere questa libreria per ogni volta che creo un assembly dinamico.Fondamentalmente, io pensare Voglio avere il mio assemblaggio dinamico per avere un .assembly extern mscorlib
nel suo manifesto salva Static
è il luogo del mscorlib.
Grazie
Soluzione
Come può realizzare l'aggiunta in questo
Static.dll
riferimento in modo che quando qualcuno esegue l'output eseguibile risultante diDynamic
che possa trovare i tipi di riferimento?
Il riferimento verrà aggiunto automaticamente.Si noti che le normali regole di sondaggio dell'assembly si applicano quando l'assembly dinamico viene eseguito, quindi per trovare l'assembly.È necessario (uno di):
- nave statica.dll accanto dinamica.DLL
- metti statica.dll nel GAC (ma per favore:non farlo!)
- eseguire dinamica.dll in un AppDomain personalizzato con una configurazione di percorso di sondaggio personalizzata che consente di static.dll essere trovato
- gestire AppDomain.AssemblyResolve per fornire statica.DLL
- usa qualcosa come ILMerge per fondere statico.dll e dinamica.DLL