问题标签 [maf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - AddIn (MAF) : 在单独的进程中运行
我有 WPF 主机应用程序,并且 AddIn 也是 WPF,它返回 UI,如下所述:
[链接] http://msdn.microsoft.com/en-us/library/bb909849%28v=vs.110%29.aspx
我想知道是否甚至可以将 WPF 插件激活为外部进程:看起来 WPF 插件只被认为与 AppDomain 隔离一起使用,这对我们的应用程序来说还不够好。如果 AddIn 因任何原因崩溃,我们不能让主机一直崩溃。即使加载的 AddIn 崩溃,我们也希望我们的主机应用程序能够运行。
我知道我们可以System.AddIn
通过以下方式实现这一目标:
但我有 WPF 插件不是System.AddIn
因为我们的插件有 WPF UI 组件。
我可以在新的应用程序域中激活 WPFAddIn,如下所示:
我无法获得有关使用 WPF 插件处理这种情况的任何最新信息。是否有任何可能的示例,如何在单独的进程中激活 WPF 插件或在主机中捕获未处理的异常。基本上我不能让主机在插件崩溃时死掉。我确实遵循了以下链接,但结果发现线程很旧并且没有当前信息。
如果我可以处理主机中的异常,那也很好。让我解释一下我的问题:
我有 WPF 主机“A”。有 WPF 插件“B”。
我已经在主机“A”中加载了插件“B”。AddIn“B”有一个点击按钮。当用户单击按钮时,将在 AddIn "B" 中触发事件。在这种情况下,没有可用的尝试捕获,并且从该事件中抛出一些空异常。这个未处理的异常导致我的主机(以及 WPF 应用程序)崩溃。
我正在寻找一种解决方案,我可以在主机“A”中处理此异常,卸载插件“B”并继续主机而不会发生任何崩溃。
我试过 AddInAddInSecurityLevel.FullTrust
和 AddInSecurityLevel.Internet
.
任何提示或示例都会有所帮助。
c# - 是否可以使用容器在 .net 3.5 应用程序中加载 .net 4.0 应用程序?
是否可以使用 MEF 或 MAF 等容器在 .net 3.5 应用程序中加载 .net 4.0 应用程序?
我知道在.net 中只支持向后兼容性这一事实,这会对容器产生任何影响吗?
c# - 无法在我的主机中显示 MAF ui 对象
我已经实现了 MAF 框架,创建了一个管道和一个 AddIn,它发送一个
UserControl
到我的主机,它本身就是一个插件。
要发送到主机的控件编写如下,它实现UserControl
并包含一个附加的字符串属性:
主机加载加载项和请求的 UI。我可以调用方法,但我无法将我的AddIn
UI 对象显示到我的主机容器中:
除非我把它放在一个单独的窗口中
new Window { Content = TestSuiteUicontainer }.Show();
或者即使我将洞插件视图放在单独的窗口中。
我的插件正在显示除UserControl
我的 AddIn ui 对象之外的所有对象。
这是我的 Hostside TestSuiteUi 合同
查看适配器:
这是我的插件返回的列表:
这是添加到我的方法
c# - 带有 MAF AddInProcess 和 Telerik RadRibbonView 的插件导致异常
我使用 System.AddIn (MAF) 设计了一个 API,以允许独立于主机加载 WPF 插件。
目前,API 使用 AppDomains 来提供分离,但是由于与 AppDomains 相关的限制,我试图将实现切换为使用 AddInProcesses。我一直使用以下项目作为模板:http ://www.cnblogs.com/Files/sheva/Process.zip
我的初始实现似乎工作正常,我能够跨隔离边界加载 WPF 元素,但我在尝试加载复杂的 Telerik 控件时发现了问题,例如。RadRibbonView,导致以下异常:
An exception of type 'System.Runtime.Remoting.RemotingException' occurred in mscorlib.dll but was not handled in user code
Additional information: Failed to read from an IPC Port: The pipe has been ended.
c# - '延迟'处理未处理的异常c#
我在我的项目中使用了 MEF 来为插件提供可扩展性。这很好用,但我已经意识到需要将插件程序集与主应用程序隔离,所以至少,如果插件发生,主应用程序不会崩溃。
不幸的是,这似乎比预期的要复杂——需要结合使用 MAF 和 MEF 来提供最佳解决方案。
但是,我的资源和时间不足,所以至少在目前,一个令人满意的解决方法就足够了。
我已经将该AppDomain.CurrentDomain.UnhandledException
事件用于详细记录目的;我注意到这个我还可以检测到AppDomain
导致异常的原因。有没有办法在这一点上实际处理这些未处理的异常?这样我可以有条件地检查异常是否发生在外部程序集中,如果是,则忽略它们,以便主应用程序继续不受影响。
OFC,建议的任何替代方法也将受到赞赏。
c# - 运行时更新进程名称
我正在使用MAF为我的应用程序加载插件,并利用 Token.Activate 重载将插件加载到自己的进程中。AddInProcess.exe
这会为我系统中的每个插件加载一个。我可以做些什么来让任务管理器反映这个过程来自我的应用程序和对应的插件?
我手中确实有 PID,所以我试图确定是否有可以调用的 Win32 API 可以更新进程名称,但我读过的所有内容似乎都表明无法更新进程名称。我错过了什么吗?
注意:我确实维护了一个加载在我的应用程序中的插件列表,因此我可以在我的应用程序中显示所有这些,但最好让任务管理器显示更多信息。
c# - 如何托管和激活进程耗尽的 WinForm-AddIns (new AddInProcess())?
事实
我正在尝试AddIns
使用 MAF(例如Add-ins and Extensibility)制作一个管理(旧版 WinForm exe)进程的主机应用程序
AddIn
激活是在进程之外完成的,例如:
在跟踪插件并将它们显示在TooStripMenu
. ToolStripMenuitem.Click
宿主应用程序中的事件触发作为合同PlugIn.ShowMainDialog()
一部分的 - 方法:AddIn
X 项目(一个 WinForm 应用程序)在一个包含以下AddIn
内容的类中实现合同:
运行上述主机应用程序会使AddIn
X Form
进程挂起,很难找出问题所在:-(
问题
是否有任何 WORKING 样本可new AddInProcess()
用于托管AddIns
包含WinForms
在那里的内容?
c# - AppDomainUnloadedException 使用 MAF (Microsoft Addin Framework)
在调用使用 MAF (System.AddIn) 托管的插件时,我不时在某些机器上遇到 AppDomainUnloadedExcpetion。这是我的管道的样子:
这是我的主机适配器:
总是在主机适配器端我有一个 topupRequestViewToContractHostSideAdapter:
和一个处理对外部应用程序域的引用的 TopUpResultContractToViewHostSideAdapter:
在插件方面,我有以下代码:
TopUpResultViewToContractAdapter 是:
TopUpRequestContractToViewAdapter 是:
到目前为止,一切似乎都符合我所阅读的内容,特别是我可以在此链接上阅读的内容:http: //msdn.microsoft.com/en-us/library/bb384186 (v=vs.100).aspx 所以我想知道我是否做错了什么,或者管道有可能在某些机器上不起作用(因为我在用于测试的所有机器上都没有问题)。
感谢您的任何提示。
c# - MAF。从加载项端调用
我正在开发一个提供插件的应用程序。我正在使用托管加载项框架来实现我的目标。有没有办法从加载项调用主机的方法?
.net - 使用 MAF 激活插件时传递用户凭据/用户帐户
我们正在使用 MAF 加载外部插件并将它们作为新进程激活。主机进程是在用户帐户 svc-host 下运行的 Windows 服务。
是否有可能在单独的进程中激活插件但在另一个用户帐户(svc-mypluginuser)下运行?
示例用例:插件连接到自己的数据库。数据库安全性基于 AD。我们需要确保每个插件只能访问自己的数据库。
我们使用的代码:
AddInProcess 似乎没有任何方法可以传递任何用户凭据。