ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-22 05:08:09  阅读:210  来源: 互联网

标签:c assemblies


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

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

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

我见过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,assemblies
来源: https://codeday.me/bug/20190722/1499438.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有