在运行时从库项目内的嵌入式资源加载程序集

本文关键字:嵌入式 资源 加载 程序集 运行时 项目 | 更新日期: 2023-09-27 18:12:21

我正在写DLL项目,我需要在它里面使用一个外部DLL,并最终将这个外部DLL包含在我的DLL中。我将这个DLL文件添加到项目的嵌入式资源中,并尝试链接到"AppDomain.CurrentDomain"。事件-从嵌入式资源加载dll的函数,但是,我仍然得到消息"无法加载文件或程序集…或者它的一个相关项。系统找不到指定的文件"
我要强调的是,我编写了绑定事件行(AppDomain.CurrentDomain)。AssemblyResolve +=....")和DLL项目内的链接函数,而不是在使用我的DLL的项目中,

所以这是OK的行为吗?为什么我仍然得到这个异常?

如果它不是一个很好的场景,我如何使用外部DLL内部的DLL项目?

代码:(inside of my library project)

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MY_EXTERNAL_DLL_PLACED_IN_EMBEDDED_RESOURCES"))
            {
                return Assembly.Load(StreamToBytes(stream));
            }
        }
static byte[] StreamToBytes(Stream input)
        {
            var capacity = input.CanSeek ? (int)input.Length : 0;
            using (var output = new MemoryStream(capacity))
            {
                int readLength;
                var buffer = new byte[4096];
                do
                {
                    readLength = input.Read(buffer, 0, buffer.Length);
                    output.Write(buffer, 0, readLength);
                }
                while (readLength != 0);
                return output.ToArray();
            }
        }

在运行时从库项目内的嵌入式资源加载程序集

只需引用程序集,然后使用IlMerge (https://www.microsoft.com/en-gb/download/details.aspx?id=17630)将引用的程序集合并回您的程序集。