如果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'.
堆栈跟踪真的很大,但从一开始就猜测,它从内存加载时找不到资源:
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)
[...]
我该如何解决这个问题?
答案 0 :(得分:0)
从MemoryStream动态加载程序集时,其工作目录将是您自己的程序集的工作目录。该目录不太可能包含程序集引用的XAML标记文件。
尝试将Environment.CurrentDirectory设置为包含必要XAML的新目录,至少在程序集加载和类实例化期间。
答案 1 :(得分:0)
正如SAKryukov在codeproject here上所建议的那样,我将WPF应用程序放入一个带有自定义入口点的库中,然后我用第二个应用程序调用它。问题似乎在于App.xaml实现starturi的方式