加载任何版本的静态引用 .NET 程序集

Load any version of a statically referenced .NET assembly

我正在开发一种工具,该工具使用来自其他产品的 .NET 程序集。少数程序集在我的项目中被静态引用(使用 "Add Reference"),因为我需要在我的代码中实际使用这些类型。但是我从产品的安装目录动态加载许多其他程序集,使用反射动态实例化我需要的任何对象。

我不想为我所依赖的产品的每个可能版本重新编译和发布我的项目的单独版本。 我需要的某些 版本的程序集肯定会出现在应用程序安装目录中,因此我想使用碰巧安装的任何版本的程序集。但它可能与我在构建工具时最初使用的程序集的版本不完全相同。 (产品版本控制策略是产品中的所有程序集都具有相同的版本号,每个版本都会更改,即使我需要静态引用的特定程序集自上一个版本以来没有更改,或者支持 100% 的我需要的 API)。

有可能实现吗?

Assembly Version redirects 允许我在请求程序集的 不同 版本时加载该程序集的特定版本。我的情况正好相反;我想加载恰好存在的任何版本。

您可以绑定到 AppDomain.CurrentDomain.AssmeblyResolve 事件并自行处理解决方案。