das serialisieren/Deserialisieren eines assembly-Objekts zu und aus einem byte array
Sagen wir erstellen eine (ausführbare) assembly in den Speicher durch
Zusammenstellung einer code-Zeichenfolge. Dann möchte ich dies serialisieren Montage
Objekt in ein byte-array und speichern Sie dann in einer Datenbank. Dann später
auf ich Sie abrufen möchten, und das byte-array aus der Datenbank und Deserialisieren
das byte-array wieder in ein assembly-Objekt, rufen Sie dann den Eintrag
Punkt der Versammlung.
Zuerst habe ich nur versucht, das zu tun diese Serialisierung wie ich jedes andere Objekt einfach in .net, aber anscheinend funktioniert nicht mit einem assembly-Objekt. Die assembly-Objekt enthält eine Methode namens " GetObjectData die bekommt Serialisierung notwendigen Daten zu instanziieren der Montage. Also ich bin etwas verwirrt, wie ich Stück alles zusammen für mein Szenario.
Die Antwort nur braucht, um zu zeigen, wie Sie ein assembly-Objekt, konvertieren es in ein byte-array zu konvertieren, dass Sie zurück in eine assembly, und führen Sie die Eingabe-Methode auf dem deserialisiert Montage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Montage ist bequemer vertreten, einfach als binäre dll-Datei. Wenn Sie denken, es wie, der rest der Probleme verdunsten. Insbesondere, schauen Sie auf
Assembly.Load(byte[])
für laden eineAssembly
aus binäre. Zu schreiben es als binary, nutzenCompileAssemblyFromSource
und Blick auf das Ergebnis istPathToAssembly
- dannFile.ReadAllBytes(path)
zu erhalten, die Binär aus der Datei.Einen schmutzigen trick, um die Montage-bytes mit der spiegelung:
Erklärung: zumindest in meinem Beispiel (assembly geladen wurde aus dem byte-array) der assembly-Instanz war der Typ "System.Reflexion.RuntimeAssembly". Dies ist eine interne Klasse, also nur zugegriffen werden, unter Verwendung von reflektion ab. "RuntimeAssembly" hat eine Methode "GetRawBytes", die Rückkehr der Baugruppe bytes.
Hier ist mein Beispiel:
System.Reflection.Assembly
istISerializable
und kann einfach serialisiert werden, etwa so:und Deserialisierung ist nur als einfache, aber nennen
BinaryFormatter.Deserialize
statt.