【问题标题】:C# MAF Activate AddIn without locking dllC# MAF 在不锁定 dll 的情况下激活 AddIn
【发布时间】:2012-03-21 18:41:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# maf system.addin


    【解决方案1】:

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

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

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

    您可以找到有关卷影复制的更多信息here。 另请阅读 CodePlex 的 System.AddIn Tools and Samples 页面上的此线程。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我已经考虑过了,让一个始终处于活动状态,而另一个正在升级。但是,由于我需要删除和移动文件,“活动”插件文件被锁定。是一个棘手的场景。这就是为什么我正在搜索是否有加载选项,而不锁定文件。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 2013-09-22
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多