Sto unendo diversi assembly .NET utilizzando ILMerge che include alcuni assembly di terze parti. Da quando ho riscontrato diversi errori, tutto si riduce al fatto che le definizioni dei tipi sono legate all'assieme in cui sono definite.Definizioni di tipo .NET negli assembly uniti (ILMerge)
Un semplice esempio è la definizione della sezione di configurazione log4net nel mio App.config. Utilizza type = "log4net.Config.Log4NetConfigurationSectionHandler, log4net" che non funzionerà poiché l'assembly log4net non esiste una volta che è stato unito al mio assieme unito. Non è un grosso problema, cambio il nome dell'assembly nel mio assieme unito e funziona perfettamente.
Un esempio un po 'più complicato è di tipo serializzato binario. Il mio sistema utilizza la serializzazione binaria per inviare determinati oggetti tra i processi. Tutti gli oggetti serializzabili sono definiti in un assembly comune a cui fanno riferimento tutti gli altri progetti. Stavo usando la serializzazione binaria predefinita, ma ha iniziato a fallire quando deserializzava gli oggetti con l'errore affermando che non riusciva a trovare l'assembly unito che serializzava l'oggetto. Ancora una volta, non un grosso problema, ho implementato un SerializationBinder personalizzato che cerca il tipo in qualsiasi assembly caricato, non solo quello fornito.
L'esempio precedente si è complicato quando il tipo serializzato fa riferimento ad altri tipi serializzabili. Ho continuato a imbattersi in sempre più problemi che stanno diventando sempre più difficili da gestire.
Il punto che sto cercando di ottenere qui è che il sistema di tipo .NET e ILMerge non sembrano giocare bene insieme. Qualcuno ha qualche esperienza con come hanno risolto questo problema? È possibile dire al runtime .NET che non mi interessa quale assembly il tipo dice che dovrebbe essere in, basta cercarlo ovunque?
NOTA: Si prega di non rispondere chiedendo perché sto unendo gli assiemi, non è questo il punto di questa domanda.
WAG: provato ancora DataContractSerializer? Non sarai in grado di utilizzare NetDataContractSerializer poiché è destinato a tipi, ma il vecchio DCS semplice dovrebbe funzionare per te ... – Will