问题标签 [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.
wpf - 退出使用 System.AddIn 的 WPF 应用程序时出现“无效的窗口句柄”
我正在开发一个 WPF 应用程序,该应用程序使用 System.AddIn 来解决我们在使用包装在 WindowsFormsHost 控件中的基于 Windows 窗体的控件时遇到的内存泄漏问题。该加载项用于根据需要加载和卸载基于 Windows 窗体的控件,以避免 WindowsFormsHost 的开销,在当前版本的 WPF 和基于 Windows 窗体的控件中的内存泄漏之前,WindowsFormsHost 的开销将一直存在,因为糟糕的清理逻辑。
我们面临的问题是,在应用程序中加载和卸载外接程序后,WPF 应用程序将在应用程序退出时抛出“无效窗口句柄”的 Win32 异常。这通常不是一个可怕的问题,但是即使可以捕获异常,它也不会阻止 Windows 将应用程序视为崩溃并在 Windows 7 下显示崩溃对话框,这是不可接受的。
关于代码,相关事实是:
仅当 WPF 宿主应用程序加载和卸载加载项时才会发生异常。我们将在加载项中释放 WindowsFormsHost 控件和基于 Windows 窗体的控件,作为在卸载加载项之前调用的自定义 Dispose 方法的一部分。
加载项在卸载之前关闭其调度程序(作为上述处置过程的一部分),这已在 MSDN 文档和博客文章中指出是必需的,并且还解决了在这种情况下未发生的问题。
我们没有选择使用基于 Windows 窗体的控件,因为它是一些报告所必需的,并且有太多的报告文件需要转换,没有合适的 WPF 版本,也没有时间去改变它。
我无法提供代码示例,因此我正在寻求有关这种情况的任何想法或以前的经验,以防我遗漏了什么。
c# - 处理使用 MAF (System.AddIn) 创建的插件
有谁知道如何处理使用 System.AddIn 创建的插件。所有在线示例似乎都展示了如何轻松加载和使用插件,但没有一个展示如何在它们存在后处理它们。我的问题是我在新进程中创建插件,而这些进程永远不会被垃圾收集,这显然是一个问题。
下面是一些说明我的问题的示例代码。假设用户从未退出此应用程序,而是创建了许多 ICalculator 实例。这些 addIn 进程是如何被处理掉的?
.net - System.AddIn、AddInStore.Rebuild 导致 UnauthorizedAccessException
我的应用程序正在动态加载插件,当我添加一个新模块时,我需要重建管道段缓存,但该应用程序在程序文件夹中没有写入权限并导致 UnauthorizedAccessException。我不想将插件复制到临时目录或用户应用程序目录中。
有没有办法在不重建管道段缓存的情况下查找/激活新添加的插件?
types - 在 AppDomain 之间共享类型
我目前正在为我正在编写的程序开发一个插件系统,并且遇到了主机和插件应该如何在一个共同的基础上通信的问题。我使用System.AddIn
命名空间(以前称为 MAF)来发现、隔离和激活加载项。
现在,由于我希望(需要?)加载项存在于与主机不同的 AppDomain 中,因此存在无法在 AppDomain 之间共享类型,因此无法在主机和加载项之间共享类型的问题。我知道 AppDomain 之间有一些对类型编组的内置支持,但对此一无所知,也不知道它是否合适。
所以问题是,如果我想在两个单独的应用程序域中的加载项和主机之间共享相同的对象(实例),我该怎么办?也许有一个更微妙的方法来解决这个问题?
wpf - WPF MAF (System.Addin) 控件中的 Telerik 报告
我正在使用 MAF (System.Addin) 将 WPF 控件显示到共享主窗体上。当我添加 Telerik reportviewer 时,我得到一个异常,我试图访问一个不同的线程,然后是拥有该控件的线程。如果您查看异常堆栈,您可以看到对 Application.Mainwindow 的引用,因为我在 Addin 中,所以应用程序主窗口不属于我的域。
有没有办法在 Addin 对象中设置 Application.Mainwindow ?
c# - 获取 BadImageFormatException
我有一些来自 System.AddIn 的插件。但是在运行 AddInStore.Rebuild 时,
然后我得到一个警告字符串:
该文件不是有效的二进制文件:D:\AK\AS\ConverterModule\output\AddIns\CompositeFileZip\7z.dll 文件名:D:\AK\AS\ConverterModule\output\AddIns\Composi...
7z.dll 不是插件程序集,而是 CompositeFileZip 插件使用的 7z 文件。我不太清楚重建功能到底在做什么。它是否试图将 7z.dll 添加为插件?
.net - 使用 System.AddIn 和进程隔离实现应用程序可靠性
我已经阅读了很多关于 System.AddIn(又名托管加载项框架)的内容。它允许您以不同的隔离模式激活加载项,包括单独的 AppDomain 或单独的进程。
我发现的大多数文章都暗示了进程隔离可用于实现应用程序可靠性这一事实,其中加载项可能会因未处理的异常而崩溃,但应用程序不会崩溃并且可以卸载有问题的加载项和继续。
我还没有找到一篇真正说明如何做到这一点的文章。我一直试图通过反复试验来弄清楚,但到目前为止,我尝试过的所有事情,如果加载项引发未处理的异常,主机应用程序就会崩溃。我让每个加载项都在自己的进程中运行,但似乎还有更多我不理解的难题。
是否可以使用 System.AddIn 创建一个主机,该主机可以在其加载项之一中存在未处理的异常?是否有代码示例或文章在某处说明了这一点?如果 System.AddIn 无法做到这一点,是否有另一种体系结构可以在 .NET 应用程序中实现这一点?
c# - 使用 System.AddIn 管理可扩展性
我正在使用 System.AddIn 向我的应用程序添加新组件。应用程序成功选择了新添加的插件。
目前,如果我想添加新插件,那么我需要创建类库类型的新项目,然后我需要为该插件编写代码。
是否可以将多个插件添加到同一个类库中,这样每次我都不需要添加新项目?
如果可能的话,我如何在加载加载项时找到合适的令牌。
提前致谢...
appdomain - System.AddIn AddInView 程序集强名称问题
我已经建立了一个使用 System.AddIn API 的应用程序。加载项当前在具有 Internet 信任的外部 AppDomain 中激活。
为了提高性能,我为所有管道组件添加了强名称。但是,一旦我这样做了,在尝试激活我的加载项时就会出现以下异常:
System.Security.SecurityException:该程序集不允许部分受信任的调用者。
查看融合日志,错误消息表明这是由于 AddInView 程序集不允许部分受信任的调用者。但是,我已将 [assembly: AllowPartiallyTrustedCallers] 属性添加到程序集。AddInView 引用的唯一程序集是:
- 系统。
- 系统插件
- System.AddIn.Contract
任何想法如何解决这个问题?
.net - 如何杀死 Thread + .net + System.AddIn
我开发了一个调度程序,它在每个新事件中创建新线程。在基于某个 id 的那个线程中,使用 System.AddIn 加载一个 dll。
现在我想中途终止那个事件?
在这种情况下如何实现此功能