0

使用 System.AddIn,有没有办法在不锁定 .dll 文件的情况下加载和激活 AddIn?我想删除或覆盖该文件以加载我的 AddIn 的新版本。

目前解锁文件的唯一方法是关闭插件。但我需要让它在来电时始终保持活动状态(异步服务,是的,一场噩梦)。

或者也许还有另一种在运行时更新插件的方法,但我做得不对。我想知道这可能是正确的方法。谢谢!

4

2 回答 2

1

System.AppDomain 类的 ShadowCopy 功能怎么样?

我还没有尝试过,但您可以尝试以下方法:

  1. 创建一个AppDomainSetup
  2. 在 AppDomainSetup 实例中将 ShadowCopyFiles 设置为 true。
  3. 在 AppDomainSetup 实例中,将 ShadowCopyFilesDirectories 设置为包含您希望能够在运行时覆盖的程序集的目录路径。这可能只是加载项程序集所在的目录。你应该尝试一下。
  4. 在 AppDomainSetup 实例中,根据您的需要设置其他所有内容。
  5. 使用AppDomain.CreateAppDomain 的此重载来创建新的应用程序域。
  6. 使用 AddInToken.LoadAddIn的此重载加载加载项

您可以在此处找到有关卷影复制的更多信息。另请阅读CodePlex的System.AddIn 工具和示例页面上的此线程。

于 2012-03-29T13:31:10.187 回答
0

加载新版本后,您希望移交如何工作?

听起来您需要两个加载项:一个(您永远不会更改)仅用于接收和缓冲传入呼叫,另一个(您确实更改)来处理这些呼叫。然后您可以关闭并升级处理加载项。同时,消息接收插件可以缓冲异步调用,直到新版本的处理插件启动并运行。

于 2012-03-21T18:46:20.117 回答