2009-03-23 5 views
5

私のシナリオ - サーバーからクライアントへ(直接TCP接続経由で)アセンブリファイルを送信しようとしています。しかし、大きな問題は、このアセンブリをバイトに変換してすぐに転送できることです。 私は次のように使用 -アセンブリからバイト

byte[] dllAsArray; 
using (MemoryStream stream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(stream,loCompiled.CompiledAssembly); 
    dllAsArray = stream.ToArray(); 
} 

をしかし、私は使用している場合 -

Assembly assembly = Assembly.Load(dllAsArray); 

私は例外を取得 -

は、ファイルまたはアセンブリをロードできませんでした「コードジェネレータサーバからロードされた165バイト、 Version = 1.0.0.0、Culture =ニュートラル、PublicKeyToken = null 'またはその依存関係の1つ。不正な形式のプログラムをロードしようとしました。 助けてください!

答えて

6

ディスクに保存したかのように、そのままのdllコンテンツではありませんか?すなわちFile.ReadAllBytes

dllが生成されたようですが、どこに保存してもかまいませんか? (一時領域、メモリストリームなど)?

編集それはあなたがコード-DOMを使用していると思われるので、PathToAssembly(コンパイラ-結果について)及びFile.ReadAllBytes(または類似したストリーミング・メカニズム)を使用してみてください。

4

ReadAllBytes経由でファイルをロードし、WriteAllBytesを使用して書き込みます。バイト[]は、ネットワークを介して転送される可能性があります。

// Transfer to byte[] 
byte[] data = System.IO.File.ReadAllBytes(@"C:\ClassLibaryOne.dll"); 

// Write to file again 
File.WriteAllBytes(@"C:\ClassLibaryOne.dll", data); 

編集:あなたのDLLを作成するためにAssemblyBuilderを使用する場合は、あなたが前にハードドライブあなたにそれを永続化するために.SAVE(ファイル名)を使用することができます。

AssemblyBuilder a = ... 
a.Save("C:\ClassLibaryTwo.dll); 
関連する問題