【发布时间】:2017-09-28 10:03:49
【问题描述】:
我的应用程序通过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 加载它时起作用?
我很困惑,我想直接从内存中加载程序集而不先保存它们。
【问题讨论】:
标签: c# wpf .net-assembly