Ich füge mehrere .NET-Assemblys mit ILMerge zusammen, einschließlich einiger Drittanbieter-Assemblys. Seitdem habe ich mehrere Fehler, die alle auf die Tatsache, dass Typdefinitionen an die Assembly gebunden sind, in denen sie definiert sind gebunden sind..NET-Typdefinitionen in zusammengeführten Assemblys (ILMerge)
Ein einfaches Beispiel ist die Log4net Config Abschnitt Definition in meiner App.config. Es verwendet type = "log4net.Config.Log4NetConfigurationSectionHandler, log4net", das nicht funktioniert, da die log4net-Assembly nicht existiert, nachdem sie in meine zusammengeführte Assembly eingefügt wurde. Keine große Sache, ich ändere den Assemblynamen in meine zusammengeführte Assembly und es funktioniert gut.
Ein etwas komplizierteres Beispiel sind binäre serialisierte Typen. Mein System verwendet binäre Serialisierung, um bestimmte Objekte zwischen Prozessen zu senden. Alle serialisierbaren Objekte sind in einer gemeinsamen Assembly definiert, auf die alle anderen Projekte verweisen. Ich habe die standardmäßige binäre Serialisierung verwendet, aber sie hat beim Deserialisieren der Objekte mit dem Fehler fehlgeschlagen, dass die zusammengefügte Assembly, die das Objekt serialisiert hat, nicht gefunden werden konnte. Wiederum keine große Sache, ich habe einen benutzerdefinierten SerializationBinder implementiert, der nach dem Typ in jeder geladenen Assembly sucht, nicht nur nach dem angegebenen.
Das vorherige Beispiel wurde komplizierter, wenn der serialisierte Typ andere serialisierbare Typen referenzierte. Ich stoße immer mehr auf Probleme, die immer schwieriger zu bewältigen sind.
Der Punkt, den ich hier versuche, ist, dass das .NET-Typsystem und ILMerge nicht gut zusammen zu spielen scheinen. Hat jemand Erfahrung damit, wie sie dieses Problem gelöst haben? Ist es möglich, der .NET-Laufzeit zu sagen, dass es mir egal ist, in welcher Assembly der Typ heißt, in der sie sich befinden sollte, einfach irgendwo danach suchen?
HINWEIS: Bitte antworten Sie nicht, fragen, warum ich Assemblys zusammenführen, das ist nicht der Punkt dieser Frage.
WAG: Haben Sie den DataContractSerializer schon versucht? Sie können nicht mit dem NetDataContractSerializer, da es an Typen gebunden ist, aber das einfache alte DCS sollte für Sie arbeiten ... – Will