Re[2]: Задача - переслать сборку .NET по сети.
От: sich Украина  
Дата: 29.11.05 15:47
Оценка:
и еще. Сериализовать сборку для ее восстановления на другой маши не получится. Ведь сериализация — это не способ хранения данных, это способ сохранения _состояния_ объекта. Когда сборка (точнее, интерфейс к ней в виде объекта 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.