Reflection 同一程序集的不同版本

Reflection 同一程序集的不同版本,reflection,.net-assembly,assembly-resolution,Reflection,.net Assembly,Assembly Resolution,我正在为一个库编写一个包装器,该库的API在一个版本和另一个版本之间发生了重大变化,因此我需要创建一个契约,允许我访问同一API的两个版本。 这是我的项目结构: - Client.dll - References - Contract.dll - Version01.dll - Version02.dll - Contract.dll - IMyService.cs - Version01.dll - MyServiceImplementation.cs

我正在为一个库编写一个包装器,该库的API在一个版本和另一个版本之间发生了重大变化,因此我需要创建一个契约,允许我访问同一API的两个版本。 这是我的项目结构:

- Client.dll
  - References
    - Contract.dll
    - Version01.dll
    - Version02.dll
- Contract.dll
  - IMyService.cs
- Version01.dll
  - MyServiceImplementation.cs
  - References
    - Version01Assembly.dll
- Version02.dll
  - MyServiceImplementation.cs
  - References
    - Version02Assembly.dll
在项目Client.dll中,我可能需要调用服务的一个实现或另一个实现,这很好。问题是加载到AppDomain的程序集始终是Version02Assembly.dll,因为在客户端的bin文件夹中,我始终只能找到此依赖项的最新版本。 如何使这两个库引用同一程序集的不同版本


我希望问题很清楚

我从来没有这样做过,但我认为你有两个选择-

  • 如果可能,为这些程序集指定强名称,并将其移动到GAC

  • 如果无法执行(1),请将程序集移动到子文件夹中(
    v1.x
    &
    v2.x
    )。然后使用
    assembly.LoadFrom()
    AppDomain.load
    [您可能会遇到类型解析问题,请通读-]


  • 是否要在项目中引用程序集的两个版本?否,请查看项目结构。它是一个引用外部程序集的依赖项。两个版本使用两个不同的依赖项版本可能重复的我不能给它们一个强名称,因为它们是外部库,但它们将API从v1完全更改为v2,我们需要从我们的应用程序提供对这两个库的访问。一个连接到TFS 2008,一个连接到TFS 2012/13。我将把程序集移动到不同的文件夹中,并使用程序集加载方法加载依赖项。