【发布时间】:2011-04-18 22:04:38
【问题描述】:
如果ms 变量是MemoryStream 并且包含一个.Net 程序集,您通常会像这样运行它:
var asm = Assembly.Load(ms.ToArray());
var entry = asm.EntryPoint;
var inst = asm.CreateInstance(entry.Name);
entry.Invoke(inst, null);
这在控制台应用程序和 Windows 窗体应用程序上运行良好,但是 WPF 应用程序会抛出异常:
Exception has been thrown by the target of an invocation.
除了System.IO.IOException类型的内部异常:
Cannot locate resource 'mainwindow.xaml'.
stacktrace确实很大,但是从一开始就猜测,从内存加载时找不到资源:
at MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode, FileAccess access)
at System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess access)
at System.IO.Packaging.PackagePart.GetStream()
at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
at System.Windows.Application.DoStartup()
at System.Windows.Application.<.ctor>b__1(Object unused)
[...]
我该如何解决这个问题?
【问题讨论】:
-
如果由于微软的实现它需要一个文件来加载资源,一个临时的exe文件是否可以工作,只有资源?如果是这样,我如何动态创建一个并将 MemoryStream 中的程序集链接到它?
标签: c# wpf reflection assemblies