我正在编写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();
}
}
答案 0 :(得分:0)
只需引用程序集,然后使用IlMerge(https://www.microsoft.com/en-gb/download/details.aspx?id=17630)将引用的程序集合并到您的程序集中。