2009-03-23 46 views
5

Kịch bản của tôi - Tôi đang cố gắng gửi Tệp Lắp ráp từ Máy chủ đến Máy khách (thông qua kết nối TCP trực tiếp). Nhưng vấn đề chính là làm thế nào để tôi chuyển đổi hội này thành các byte để nó có thể dễ dàng được chuyển? tôi đã sử dụng sau -Lắp ráp theo Byte

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

Nhưng khi tôi sử dụng -

Assembly assembly = Assembly.Load(dllAsArray); 

tôi nhận được một ngoại lệ -

Không thể tải tập tin hoặc lắp ráp '165 byte tải từ máy chủ phát Code, Phiên bản = 1.0.0.0, Văn hóa = trung lập, PublicKeyToken = null 'hoặc một trong các phụ thuộc của nó. Một nỗ lực đã được thực hiện để tải một chương trình với một định dạng không chính xác. Xin hãy giúp !!!

Trả lời

6

Chẳng phải đó chỉ là nội dung dll thô, như thể bạn đã lưu nó vào đĩa? tức là tương đương với File.ReadAllBytes?

Có vẻ như dll được tạo - bạn có thể lưu nó ở bất kỳ đâu không? (vùng tạm thời, luồng bộ nhớ, v.v ...)?

chỉnh sửa Kể từ khi có vẻ như bạn đang sử dụng mã-dom, hãy thử sử dụng PathToAssembly (trên trình biên dịch-kết quả) và File.ReadAllBytes (hoặc một cơ chế trực tuyến tương tự).

4

Chỉ cần tải Tệp qua ReadAllBytes và ghi qua WriteAllBytes. Các byte [] có thể được chuyển qua mạng.

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

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

chỉnh sửa: Nếu bạn sử dụng một AssemblyBuilder để tạo dll, bạn có thể sử dụng lệnh .save (fileName) để kéo dài nó cho bạn ổ cứng trước.

AssemblyBuilder a = ... 
a.Save("C:\ClassLibaryTwo.dll);