当前位置:  开发笔记 > 编程语言 > 正文

如何加载与主装配件捆绑在一起的嵌入式装配?

如何解决《如何加载与主装配件捆绑在一起的嵌入式装配?》经验,为你挑选了2个好方法。

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

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

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

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

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



1> Jb Evain..:

有一个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对象,您可以使用它来获取类型,然后使用它们执行任何操作.



2> 小智..:

我建议使用ILMerge实用程序,它通过修复引用而不是从资源加载原始程序集,将所有程序集合并为一个程序集.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有