问题标签 [system.addin]

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.

0 投票
1 回答
287 浏览

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.

0 投票
0 回答
221 浏览

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 所以我想知道我是否做错了什么,或者管道有可能在某些机器上不起作用(因为我在用于测试的所有机器上都没有问题)。

感谢您的任何提示。

0 投票
0 回答
399 浏览

c# - 构建 MAF 管道时自定义程序集解析

我正在开发需要支持插件不同程度隔离的系统。我选择了 MAF,因为它符合我的需求,支持开箱即用的单独进程隔离和 AppDomain 隔离。

下面的示例使用了单独的进程隔离:

但是,我在使 MAF 与主机和插件之间共享的库一起工作时遇到了问题。假设,我有项目(带有输出目录):

和参考资料

这给了我一个干净的构建,每个管道目录中都有单个 dll,一切正常,管道已构建,有效且工作。

直到我添加有问题的:

这引入了一个问题,因为 My.PlugIn.AddIn 项目不能包含在管道中,因为:

  1. 加载 My.PlugIn.AddIn 时出现问题 - 无法找到依赖项 My.AddIn.Shared(如果 AddInViews 包含带有插件库的单个 dll)
  2. 无法将透明代理转换为我的 IContract 类型 - (当 colyLocal=true 并且 AddInViews 包含超过 1 个 dll 时)

此外,值得一提的是 My.PlugIn.AddIn 中只有单个类用 AddInBaseAttribute 修饰,共享程序集没有单个类。

因此,在这两种情况下都无法加载插件。我想通过我的自定义事件处理程序来解决问题

在调用 AddInStore.Rebuild 之前,但这只会影响我的主机应用程序正在运行的域,并且不会影响由 System.AddIn.Hosting.AddInStore 在内部创建的域“加载项模型发现工作者 AD”

由于此类是静态的,因此无法覆盖域的创建。此外,它不提供任何允许我访问内部域解决错误的事件。有什么方法可以注入我的自定义程序集解析规则或强制内部 appDomain 从我的主程序继承解析事件?

0 投票
1 回答
167 浏览

c# - 如何将 automapper 与 System.AddIn 一起使用?

在 System.AddIn(又名 MAF)管道适配器中,需要手动将值从一种 DTO 类型复制到另一种 - 从 HostView 类型到 Pipeline Contract 类型以及从 Pipeline Contract 类型到 AddIn 视图类型(然后再返回)。这似乎是使用自动映射器的理想情况。

但是,我不确定在 HostView 和 AddInView 适配器中使用和打包 3rd 方程序集的正确方法,尤其是当 AddIn 激活在单独的 AppDomain 中时。

我尝试了以下方法:

  • 将 automapper 的 nuget 引用添加到 AddIn 适配器项目并在其中创建映射配置文件。(我对初始化配置文件的适配器使用了静态 ctor,因为 MAF 负责实例化适配器。)

  • 与直觉相反,为了让管道定位并激活适配器支持的插件,我必须确保 automapper DLL 位于我主机的 bin 目录中- 在实际适配器 DLL 旁边的“AddInAdapters”文件夹中拥有 automapper DLL没有效果。

通过这种安排,我能够在我的开发盒上找到并激活插件(win 7)。但是完全相同的二进制文件在 Server2008R2 上不起作用。(我知道,我知道:我无法控制开发或服务器操作系统的选择)

我们正在使用(和目标).Net 4.5.1 - 是的,它在桌面和服务器上。我们正在使用 automapper 2.2.1 - 不,它不在我的开发箱的 GAC 中

适配器使用的第 3 方程序集应位于何处(插件端和主机端)。尤其是在考虑 AppDomain 隔离时

为什么上述安排适用于 Windows 7,而不适用于 2008R2?

0 投票
1 回答
1399 浏览

wpf - 在 Crystal Report for .Net 中设置报表源会在 crdb_adoplus.dll 中引发 NullReferenceException

在将 Crystal Reports XI 用于 dot net 时,我遇到了一个非常奇怪的异常。我目前正在为企业应用程序在 VB.Net 中开发报告服务。该服务使用System.AddIn(又名托管加载项框架或 MAF)作为插件/加载项托管在主应用程序中。主应用程序使用 Win Forms,并将在 WPFElementHost 中托管由我的加载项提供的控件。

加载项驻留在它自己的应用程序域中,并使用NativeHandleContracts将 WPF 控件从加载项应用程序域传递到它们在运行时绑定到 WPFElementHost 的宿主应用程序域。

外接程序提供的 WPF 控件中有一个 Crystal Report Viewer 控件。到目前为止,一切正常。我可以在我的加载项中创建几乎任何 WPF 控件,并且它在主机应用程序中完美运行。一旦我尝试向查看器附加报告,这就会崩溃。

首先,我尝试使用 ADO.Net DataSet 作为我的数据模式来构建我的报告。每当这将尝试加载到报表查看器中时,水晶报表都会抛出架构不存在的异常。这是因为由于某种原因水晶报告想要查看主机应用程序应用程序域以及模式的命名空间。但是,架构存在于完全不同的应用程序域和命名空间中。我尝试将架构嵌入为资源,并复制本地。没有成功,我转而使用 .Net Objects。

使用 .Net Objects,我创建了一个用于设计报告的 XML 文档。这工作得很好,让我可以通过我的报告并在主机应用程序中查看它。这就是我现在卡住的地方。每当我尝试为报表提供 DataSource 时,Crystal Reports 都会在 SAP 的 DLL crdb_adoplus.dll 中引发空引用异常,并且没有告诉我导致异常的原因。我的所有对象、报表、查看器、wpf 元素宿主和 wpf 控件都已正确实例化。我的数据集使用实体框架提供服务,正在转换为 DataSet,因此其中没有可为空的类型,只有 dbnull 值。没有理由此时应该抛出这个异常。除了抛出异常之外,没有提供额外的输出。

此外,在此加载过程中,创建的报表对象的部分内容将超时。这将在没有任何异常或任何类型的错误被抛出的情况下发生。

下面是检索数据、尝试将数据绑定到报表以及将报表绑定到查看器的代码。

这段report.SetDataSource(dataSet)代码是抛出异常的地方。

我是否忽略了一些明显的东西?有没有办法说服 Crystal Reports 在正确的应用程序域中使用 ADO.Net 数据集,这样我就可以摆脱 XML 问题?

此加载项需要存在于单独的应用程序域或进程中,以便可以在运行时动态卸载和重新加载。这是对系统的要求。它还需要是自包含的,所以我不能在应用程序的主机端做任何事情,这一切都必须在加载项内运行。

在此先感谢您的帮助。

0 投票
1 回答
122 浏览

maf - System.Addin (MAF) 源代码是否可用?

我目前正在评估创建 C# 插件架构的不同方法(主要是 MEF 与 MAF)。System.Addin (MAF) 看起来很有趣,但网络上没有太多关于它的信息。

为了更好地理解 System.Addin 的工作方式,我会很高兴看到它的源代码。

我用谷歌搜索没有成功,你知道微软是否在某处发布了 MAF 源代码吗?

0 投票
0 回答
54 浏览

wpf - 跨应用程序域边界 WPF 调用命令

我正在开发一个基于 MVVM 和 AddIns 的应用程序。我想通过包含基于 MVVM 的程序集的 AddIn 模块动态构建菜单(功能区控件)。在主机端,我无法触发通过 ViewModel 绑定的命令,该命令托管在与主机应用程序不同的 appdomain 中。我应该如何通过所有绑定到相应插件模块的命令/图标来解决这个动态功能区选项卡生成问题。

编辑: 我开发了一个基于 MVVM 的应用程序。所有应用程序状态和命令都在 ViewModel 中,并且绑定到 View,按预期工作。之后,我们使用 .net 的托管插件框架 (MAF) 编写代码,并通过它合并该应用程序。问题来了,我们无法根据主机端插件中的命令生成菜单。我编写了一个属性来将 ViewModel 插件中的菜单返回到主机,但它只返回普通对象,并且命令不会通过插件框架传播。这是一个代码示例:

此代码是用 say 编写的TestViewModelHelloCommand是 WPF 输入库中 ICommand 接口的实现。HelloCommand 没有到达主机端,其他一切都可用,我正在正确获取功能区控件的选项卡和组,但命令没有传输到插件主机。

Edit2 问题是,我们想在 AddIn-Host 窗口中显示功能区,这些按钮引用 AddIn 的 ViewModel 中的命令,最后(我可以)是将菜单控件也移动到 AddIn。有没有人遇到过同样的问题,想分享一下经验?

0 投票
0 回答
20 浏览

maf - 将事件从 AddIn 发送到主机

我有一个 AddIn 管道,想将信息从 AddIn 发送到主机。如何在 AddIn 上定义事件并从主机端订阅这些事件?

实际上,我在我的 AddIn 合同中定义了两个名为 Activate/Deactivate 的方法,如果指定的 addin 是否成功激活/Deactivate,我想向主机发送信息。主机在插件上调用这些方法,它们工作正常,但我怎么能得到这些方法是否按需要执行的事件。