4

コード文字列をコンパイルして、メモリ内に (実行可能な) アセンブリを作成するとします。次に、このアセンブリ オブジェクトをバイト配列にシリアル化し、データベースに格納します。その後、データベースからバイト配列を取得し、バイト配列を逆シリアル化してアセンブリ オブジェクトに戻し、アセンブリのエントリ ポイントを呼び出します。

最初は、.net の他の単純なオブジェクトと同じように、このシリアル化を実行しようとしましたが、アセンブリ オブジェクトでは機能しないようです。アセンブリ オブジェクトには、アセンブリの再インスタンス化に必要なシリアル化データを取得する GetObjectData というメソッドが含まれています。そのため、シナリオでこれらすべてをどのように組み合わせるかについて、私は多少混乱しています。

答えは、アセンブリ オブジェクトを取得し、それをバイト配列に変換し、それをアセンブリに戻してから、逆シリアル化されたアセンブリでエントリ メソッドを実行する方法を示すだけで済みます。

4

4 に答える 4

4

アセンブリは、単純にバイナリ dll ファイルとして表す方が便利です。そのように考えれば、残りの問題は蒸発します。特に、fromバイナリのロードAssembly.Load(byte[])については、 を参照してください。バイナリとして書き込むには、を使用して結果を確認し、ファイルからバイナリを取得します。AssemblyCompileAssemblyFromSourcePathToAssemblyFile.ReadAllBytes(path)

于 2011-10-02T23:14:47.057 に答える
1

System.Reflection.AssemblyISerializable次のように単純にシリアル化できます。

Assembly asm = Assembly.GetExecutingAssembly();
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, asm);

逆シリアル化も同様に単純ですが、BinaryFormatter.Deserialize代わりに呼び出します。

于 2011-11-23T01:09:04.267 に答える