在运行时从库项目内的嵌入式资源加载程序集
本文关键字:嵌入式 资源 加载 程序集 运行时 项目 | 更新日期: 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)将引用的程序集合并回您的程序集。