Msbuild ODP Oracle.DataAccess.DLL引用32/64位

Msbuild ODP Oracle.DataAccess.DLL引用32/64位,msbuild,32bit-64bit,odp.net,odac,teamcity-7.0,Msbuild,32bit 64bit,Odp.net,Odac,Teamcity 7.0,我有一个.NET3.5程序集,它引用了在VisualStudio2010中构建的ODP(Oracle.DataAccess.dll)。复制本地=False,特定版本为False。路径是 C:\[ORACLE_BASE]\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll 版本为2.112.3.0(运行时v.2.0.50727)。我的开发机器上安装了ODAC 11.2.0.3.0 x86。当我构建这个项目并在集成测试中进行测

我有一个.NET3.5程序集,它引用了在VisualStudio2010中构建的ODP(Oracle.DataAccess.dll)。复制本地=False,特定版本为False。路径是

C:\[ORACLE_BASE]\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll
版本为2.112.3.0(运行时v.2.0.50727)。我的开发机器上安装了ODAC 11.2.0.3.0 x86。当我构建这个项目并在集成测试中进行测试时,一切正常,ODP被加载并使用。我正在尝试使用MSBuild(通过TeamCity)在WindowsServer2003x64计算机上的TeamCity 7上构建相同的集成测试。此计算机安装了相同版本的ODAC,但安装了x64版本

尝试加载Oracle.DataAccess.dll时出现问题。它似乎在寻找.NET2版本,但首先找到了.NET4版本,然后不可避免地失败了。查看日志,它找到了.NET 4版本,但仍然无法解析引用,似乎在明确查找x86版本。MSBuild的配置为: MSBUILD版本:.NET 4.0 运行x86平台

C项目参考:

<Reference Include="Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86" />

我也有同样的问题。服务器上的MsBuild版本中存在问题。我使用了Msbuild 4.0,它使用的是v4.0运行时,而不是Msbuild 3.5中使用的2.0.xx

如果可能,尝试使用Msbuild 3.5。如果没有,请检查GAC是否正确安装了ODP。我不记得我是如何为MSBuild 4.0修复它的,但我不得不使用GAC程序集和machine.config

这是我们64位构建服务器上Oracle.DataAccess.dll的GAC列表:

这是machine.config的一部分。我必须添加程序集重定向:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral" />
        <bindingRedirect oldVersion="2.102.0.0-2.120.0.0" newVersion="2.112.2.0" />
      </dependentAssembly>
      <dependentAssembly>
    </assemblyBinding>
</runtime>


我更新了所有machine.config以确保:)但更新Framework64 machine.config应该足够了。

在我的生成计算机上,我只有AMD64的2.112.3.0和4.112.3.0版本。x64没有列在那里。你是说app.config不是machine.config,还是说它需要在机器的配置上完成?我将CSPRoj设置为不查找特定版本,那么这不应该包括您的machine.config更改吗?对于使用MSBUild(而不是rake脚本)的teamcity Bulid,将其设置为.NET 3.5 for MSBUild会导致其他程序集无法生成,表明它找不到LINQ。这让我很困惑,因为LINQ在.NET3.5中,您可能安装了32位和64位ODAC?另外,在我的第一条评论中,我的意思是在我的第二句话中说“x86没有列在那里”。现在无法编辑它。我可能同时安装了32位和64位。理论上,64位安装就足够了。我更新了.NET framework安装文件夹中的machine.config。有两种,一种用于2.0.x运行时,另一种用于4.0运行时。对不起,那是很久以前的事了,我记不清一年前我到底做了什么……好吧,我最后安装了x86和x64,它正常工作了。我将x86放在一个单独的ORACLE_HOME base中,它构建得很好,而且我不必更改任何Team City设置(仍在执行MSBuild v4.0)。我最终不必更改任何machine.config。
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral" />
        <bindingRedirect oldVersion="2.102.0.0-2.120.0.0" newVersion="2.112.2.0" />
      </dependentAssembly>
      <dependentAssembly>
    </assemblyBinding>
</runtime>