MAF与OSGi相比如何?
MAF不是我能轻易找到的东西,而且我在徘徊为什么人们不会像MEF那样推荐它?它似乎与OSGi相似,至少从我第一眼就看出来了.
我需要使用在AppDomain中执行的加载项来实现解决方案.我遇到了MAF,这是 - 通过描述 - 我需要什么.
然而,文档和它的CodePlex项目似乎有点过时,文档中的某些页面不存在.NET的"当前版本".
我还发现了关于陷阱和MAF复杂性的帖子.
所以我现在不确定是否应该使用它,或者更确切地说自己完成所有工作(加载项管理,加载/卸载AppDomains等).
任何想法和/或经验都表示赞赏
我试图通过在它自己的进程中启动的 MAF 插件中执行它来沙箱潜在的恶意代码:
var x = token.Activate<Ix>(new AddInProcess(), AddInSecurityLevel.Internet);
Run Code Online (Sandbox Code Playgroud)
这似乎运行良好,除了在处理 StackOverflowException 时会显示一个对话框:“AddInProcess.exe 已停止工作”。这使得测试变得非常困难
[TestMethod]
public void TestStackOverflow() {
var host = new Host(Environment.CurrentDirectory
+ "/../../../build/pipeline");
host.Run("foo");
host.Tick();
Thread.Sleep(1000);
host.Monitors.Count.Should().Be(0);
host.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)
如果我在 Sleep 到期之前单击“关闭”按钮,则测试成功,否则失败。这表示在按下“关闭”按钮之前该过程不会退出。鉴于我希望进程终止,我如何确保它这样做而不引发此对话框?我尝试将我的操作系统设置为“从不检查解决方案”,但对话框仍然出现。将其设置为“自动检查解决方案”可避免出现对话框,但最多需要 10 秒,这是不可取的……我宁愿避免操作系统设置。
我有WPF主机应用程序,AddIn也是WPF,它返回UI,如下所述:
[链接] http://msdn.microsoft.com/en-us/library/bb909849%28v=vs.110%29.aspx
我想知道是否甚至可以激活WPF AddIn作为外部进程:看起来WPF加载项只被认为与AppDomain隔离一起使用,这对我们的应用程序来说还不够好.如果AddIn由于任何原因崩溃,我们不能让主机一直崩溃.即使加载了AddIn崩溃,我们也希望我们的主机应用程序能够运行.
我知道我们可以System.AddIn
通过以下方式实现这一目标:
//Activate the selected AddInToken in a new
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate<Calculator>(new AddInProcess(), AddInSecurityLevel.fulltrust);
Run Code Online (Sandbox Code Playgroud)
但我有WPF AddIns不是System.AddIn
因为我们的AddIns有WPF UI组件.
我可以在新的应用程序域中激活WPFAddIn,如下所示:
//Activate the selected AddInToken in a new
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Internet);
Run Code Online (Sandbox Code Playgroud)
我无法获得有关使用WPF AddIns处理此情况的任何最新信息.是否有任何可能的示例如何在单独的进程中激活WPF AddIn或在主机中捕获未处理的异常.基本上我不能允许主机在addIn崩溃时死掉.我确实按照以下链接,但结果是线程很老,没有最新信息.
如果我可以在主机中处理异常也会很好.让我解释一下我的问题:
我有WPF主机"A".有WPF AddIn"B".
我在主机"A"中加载了AddIn"B".AddIn"B"有一个单击按钮.当用户单击按钮时,将在AddIn"B"中触发事件.在那种情况下,没有尝试捕获可用,并且从该事件抛出一些null异常.这个未处理的异常导致我的主机(WPF应用程序)崩溃.
我正在寻找一个解决方案,我可以在主机"A"中处理此异常,卸载AddIn"B"并继续Host而不会发生任何崩溃.
我曾尝试与加载宏AddInSecurityLevel.FullTrust
,以及 AddInSecurityLevel.Internet
.
任何提示或示例都会有所帮助.