在Library Project中的运行时从嵌入式资源加载程序集

时间:2014-07-09 15:05:30

标签: c# dll .net-assembly

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

这样行为还行吗?为什么我仍然得到这个例外?

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

代码:(在我的图书馆项目内)

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();
            }
        }

1 个答案:

答案 0 :(得分:0)

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