同一组件的不同版本

时间:2014-02-18 08:48:44

标签: reflection .net-assembly assembly-resolution

我正在编写一个库的包装器,它在一个版本和另一个版本之间的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中的程序集始终是我客户端的bin文件夹中的Version02Assembly.dll原因我总是只找到此依赖项的最新版本。 如何保持这两个库引用同一程序集的不同版本?

我希望问题很清楚

1 个答案:

答案 0 :(得分:0)

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

  1. 如果可能,请为这些程序集指定强名称并将其移至GAC。

  2. 如果无法(1),请将程序集移动到子文件夹(v1.x& v2.x)。然后使用Assembly.LoadFrom()AppDomain.Load加载程序集[可能会遇到类型解析问题,请仔细阅读 - http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions]