c# – 如何加载与主程序集捆绑在一起的嵌入式程序集?

将一个组件捆绑到另一个组件中的最佳做法是什么?我有一个我正在分发的程序集,但是我在其中使用了几个第三方程序集,而且我不想分发多个程序集.

所以,我想将几​​个程序集编译成我分发的程序集,以便它们只是内置的.

这是最好的做法是什么?我知道我可以将其他程序集放在我的项目中并将它们设置为“嵌入式资源”,但是如何让它们再次退出,这意味着如何将它放到我可以实例化嵌入式程序集中定义的类的地方?

我见过Assembly.Load方法,但似乎想要一个文件路径.是否有另一种方法来加载嵌入式程序集?你如何告诉Load方法汇编的位置?

加载嵌入式程序集后,它是否只是神奇地在范围内,我可以*地实例化类吗?

解决方法:

有一个Assembly.Load(byte[])重载可用于从内存数组加载程序集.如果我没记错的话,那就是LINQPad的工作方式.这是一种方法,假设程序集是System.Reflection.Assembly的一个实例,包含其他程序集作为托管资源:

Stream embedded = assembly.GetManifestResourceStream ("asm.dll");
byte [] buffer = new byte [embedded.Length];
using (embedded) {
    int length = buffer.Length;
    int offset = 0;
    while (length > 0) {
        int read = assemblyStream.Read (buffer, offset, length);
        if (read == 0)
            break;

        length -= read;
        offset += read;
    }
}

Assembly assembly = Assembly.Load (buffer);

这个问题是运行时必须固定字节数组,所以我建议将程序集写入临时文件并使用Assembly.LoadFile.

两种方法都返回一个System.Reflection.Assembly对象,您可以使用它来获取类型,然后使用它们执行任何操作.

上一篇:c# – 程序集以及何时不能选择强命名?


下一篇:12.Hamming Distance(汉明距离)