我正在编写一个库的包装器,它在一个版本和另一个版本之间的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原因我总是只找到此依赖项的最新版本。 如何保持这两个库引用同一程序集的不同版本?
我希望问题很清楚
答案 0 :(得分:0)
我从来没有这样做,但我认为你有两个选择 -
如果可能,请为这些程序集指定强名称并将其移至GAC。
如果无法(1),请将程序集移动到子文件夹(v1.x
& v2.x
)。然后使用Assembly.LoadFrom()
或AppDomain.Load
加载程序集[可能会遇到类型解析问题,请仔细阅读 - http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions]