C# 加载外部程序集时的最佳做法

C# 加载外部程序集时的最佳做法,c#,.net,assemblies,C#,.net,Assemblies,我正在寻找一些关于如何最好地将外部程序集作为分发和加载的一部分的指导 基本情况是,我一直在开发一个程序,该程序旨在与另一个已安装的程序进行交互。 另一个程序有开放的.Net API,设计用于与第三方应用程序(如我自己的应用程序)接口,但是它会定期更新。 这些更改并不总是破坏更改,但这通常会迫使我更新自己的应用程序,并为公众发布一个版本 我考虑的三个主要概念是: 用我自己的应用程序打包只包含API的外部程序集。 考虑到的缺点是:发行版大小增加。强制检查已安装的外部应用程序的二进制文件和API二进制

我正在寻找一些关于如何最好地将外部程序集作为分发和加载的一部分的指导

基本情况是,我一直在开发一个程序,该程序旨在与另一个已安装的程序进行交互。 另一个程序有开放的.Net API,设计用于与第三方应用程序(如我自己的应用程序)接口,但是它会定期更新。 这些更改并不总是破坏更改,但这通常会迫使我更新自己的应用程序,并为公众发布一个版本

我考虑的三个主要概念是:

  • 用我自己的应用程序打包只包含API的外部程序集。 考虑到的缺点是:发行版大小增加。强制检查已安装的外部应用程序的二进制文件和API二进制文件的本地副本,并尝试更新它们以保持同步

  • 直接从外部安装文件夹中存在的位置加载外部程序集。 考虑的缺点是:如果外部应用程序决定更新二进制文件,则锁定它们

  • 将外部程序集复制到临时文件夹,然后从那里加载它们。 考虑到的缺点是:复制几十个文件(包括资源程序集)并可能将其留在临时文件夹中所需的时间

  • 是否有最佳实践,或其他公认的方法


    编辑:我应该指出,我的应用程序使用WPF。

    我在使用第三方应用程序时遵循的一些一般概念:

    • 在第三方API和代码之间放置一个接口,以在对象和第三方对象之间提供接口。中断更改将在适配器层中更改,以使其兼容
    • 在测试中为外部服务使用存根,以便可以切换出第三方调用

    你可以考虑遵循我所参加的课程中提到的“边防”方法。在这个策略中,在第三方API做出突破性的更改之前,您需要与它们配对。为系统编写一套单元测试,描述您对它们的使用,然后第三方将它们集成到自己的系统单元测试中。然后,在将系统的API更新推送到上游之前,系统会通知您任何中断的更改!如果这是您可以与第三方合作完成的事情,则可以避免将来的一些痛苦。

    卷影复制程序集:我刚刚仔细查看了AppDomainSetup.ShadowCopyDirectory,我不确定这是否适用于来自不同位置的两组程序集。本地引用的程序集和外部程序集都需要由应用程序加载。AppDomainSetup似乎只与一个组一起工作。我必须手动加载本地引用的程序集,以免引发“找不到文件”异常。您考虑过使用resp吗?它是为您的案例中的任务创建的。引用MSDN的话:
    为什么我们几年前在Microsoft内部构建了它,许多小组都在努力寻找解决方案,解决如何使用可重用组件构建应用程序的问题,这些组件可以被发现、重用并动态组合