如何控制ODP.NET的多个版本

时间:2013-10-31 17:08:45

标签: c# oracle11g

我编写了一个.NET 4 NT服务,它连接到Oracle 11g数据库,现在我希望部署。

目标计算机已安装Oracle驱动程序,但仅适用于ODP v2。 (我假设; ODP.NET \ Bin中只有一个2.x文件夹)

没有升级路径;公司套餐不包括我要找的东西,我对这些标准版本中应该包含的内容没有任何说法。

另一方面,我允许安装下载的驱动程序......

目标已使用已安装的驱动程序运行3个应用程序。要求他们继续这样做不受干扰。

因此,如果安装了2套Oracle驱动程序,如何确保我的新应用程序使用新设置,同时保留旧设置为“主要”?

2 个答案:

答案 0 :(得分:0)

您需要查看并行部署as outlined in Oracle's technetwork

如果这是不可能的,出于某种原因,你将不得不考虑隔离应用程序或其他解决方案。

答案 1 :(得分:0)

我假设两个安装程序都将ODP程序集放在GAC中。如果是这样,您可以强制使用特定版本。

确保将.csproj文件中的完全限定引用设置为要使用的ODP版本。我不知道你需要的程序集的细节,但这里是csproj文件中引用应该是什么样子的一个例子。确保它是完全合格的(有名称,版本,文化,公钥,架构)。那个SpecificVersion是真的。

<Reference Include="ODP..., Version=4.x.x.x, Culture=neutral, PublicKeyToken=theKey, processorArchitecture=...">
  <HintPath>..\..\..\lib\ODP\ODP.dll</HintPath>
  <SpecificVersion>True</SpecificVersion>
</Reference>

编译完成后,这将使编译代码中的引用成为特定版本。在运行时,程序集加载程序将查找您请求的版本。使用Fusion Log Viewer跟踪这是否按预期发生。如果不是,您可以通过各种方式实现程序集绑定重定向。

如果您需要走这条路线,请查看这些链接:

Redirecting Assembly Versions

How the Runtime Locates Assemblies