и еще. Сериализовать сборку для ее восстановления на другой маши не получится. Ведь сериализация — это не способ хранения данных, это способ сохранения _состояния_ объекта. Когда сборка (точнее, интерфейс к ней в виде объекта Assembly)сериализуется, сохраняется только информация о состоянии этого объекта. Для десериализации этого объекта все равно потребуется эта самая сборка.
а вот откопал свой код для передачи сборки (тут предполагается, что там, где сборка будет загружаться, все сборки, на которые она ссылается, будут присутствовать):
using System;
using System.Reflection;
using System.IO;
//////////////////////////////////////////////////////////////////////////
namespace DistributedProcessing
{
[Serializable]
public class TransitAssembly
{
[Serializable]
struct AsmFile
{
public String sFileName;
public Byte[] arFileData;
}
public TransitAssembly(Assembly asm)
{
AssemblyFiles = new AsmFile[asm.GetFiles().Length];
int i = 0;
foreach(FileStream fs in asm.GetFiles())
{
AssemblyFiles[i].sFileName = Path.GetFileName(fs.Name);
AssemblyFiles[i].arFileData = new byte[(int) fs.Length];
fs.Read(AssemblyFiles[i].arFileData, 0, AssemblyFiles[i].arFileData.Length);
fs.Close();
i++;
}
}
public Assembly LoadInCurrDomain()
{
return Assembly.Load(AssemblyFiles[0].arFileData);
}
public Assembly LoadInDomain(AppDomain Domain)
{
return Domain.Load(AssemblyFiles[0].arFileData);
}
public void Save()
{
Save("");
}
public void Save(String path)
{
foreach(AsmFile af in AssemblyFiles)
{
FileStream fs = new FileStream(
path + af.sFileName , FileMode.Create,
FileAccess.Write, FileShare.Write );
fs.Write(af.arFileData, 0, af.arFileData.Length);
fs.Close();
}
}
private AsmFile[] AssemblyFiles;
}
}
//////////////////////////////////////////////////////////////////////////
... << RSDN@Home 1.2.0 alpha rev. 0>>