【问题标题】:Assembly to Bytes组装成字节
【发布时间】:2009-03-23 13:19:28
【问题描述】:

我的场景 - 我正在尝试将程序集文件从服务器发送到客户端(通过直接 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 字节,版本=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。 请帮忙!!!

【问题讨论】:

    标签: c# .net assemblies


    【解决方案1】:

    难道这只是原始的 dll 内容,就好像您已将其保存到磁盘一样?即相当于File.ReadAllBytes?

    听起来好像生成了 dll - 你可以将它保存在任何地方吗? (临时区域、内存流等)?

    edit 由于您似乎在使用 code-dom,请尝试使用 PathToAssembly(在编译器结果上)和 File.ReadAllBytes(或类似的流式传输机制)。

    【讨论】:

      【解决方案2】:

      只需通过 ReadAllBytes 加载文件并通过 WriteAllBytes 写入。 byte[] 可以通过网络传输。

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

      编辑:如果您使用 AssemblyBuilder 创建您的 dll,您可以使用 .Save(fileName) 将其保存到您的硬盘之前。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多