【问题标题】:Different versions of the same assembly同一程序集的不同版本
【发布时间】:2014-02-18 08:48:43
【问题描述】:

我正在为一个库编写一个包装器,该库在一个版本和另一个版本之间的 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 文件夹中我总是只找到此依赖项的最新版本。 如何让这两个库引用同一程序集的不同版本?

我希望问题很清楚

【问题讨论】:

标签: reflection .net-assembly assembly-resolution


【解决方案1】:

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

  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]

【讨论】:

  • 我不能给它们一个强名称,因为它们是外部库,但是它们完全将 API 从 v1 更改为 v2,我们需要从我们的应用程序中提供对这两个库的访问。一个连接到 TFS 2008,一个连接到 TFS 2012/13。我会将程序集移动到不同的文件夹中,并使用程序集加载方法来加载依赖项。
猜你喜欢
  • 2010-09-18
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多