我的应用程序通过AppDomain.CurrentDomain.AssemblyResolve
事件加载所需的程序集。这些程序集是执行程序集的资源。
private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
{
var executingAssembly = Assembly.GetExecutingAssembly();
var assemblyName = new AssemblyName(args.Name);
var resPath = assemblyName.Name + ".dll";
using (var stream = executingAssembly.GetManifestResourceStream(resPath))
{
if (stream != null)
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
return Assembly.Load(buffer);
}
}
return null;
}
一般而言,这个方法可以正常工作,但是被加载的程序集包含某些控件的默认样式,这些样式不会被应用。但是,如果我不通过Assembly.Load来加载程序集,而是将其保存到文件中并通过
Assembly.LoadFrom
加载,一切都能够很好地运行。这两者之间有什么区别?为什么直接从内存中加载程序集无法正常工作,或者为什么先将程序集保存到磁盘上再使用
Assembly.LoadFrom
加载时就能顺利运行呢?我感到非常困惑,希望能够直接从内存中加载程序集而不必先将其保存到磁盘上。