Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET 4.0对错误Oracle.DataAccess.dll的引用_C#_.net_Oracle_Cruisecontrol.net - Fatal编程技术网

C# .NET 4.0对错误Oracle.DataAccess.dll的引用

C# .NET 4.0对错误Oracle.DataAccess.dll的引用,c#,.net,oracle,cruisecontrol.net,C#,.net,Oracle,Cruisecontrol.net,当我使用CruiseControl.NET构建服务器构建C#应用程序时,它总是引用错误的Oracle.DataAccess.dll。在我的本地机器上,它工作没有任何问题 我的本地计算机和生成服务器都是Windows 7计算机。我在这两台机器上都安装了Oracle Client 11.2.0.3(32位和64位)。 我的应用程序是.NETFramework4.0C#应用程序。我将OracleDataAccess.dll的特定版本和本地副本设置为false 当我在本地机器上构建它时,一切正常。 我使

当我使用CruiseControl.NET构建服务器构建C#应用程序时,它总是引用错误的Oracle.DataAccess.dll。在我的本地机器上,它工作没有任何问题

我的本地计算机和生成服务器都是Windows 7计算机。我在这两台机器上都安装了Oracle Client 11.2.0.3(32位和64位)。 我的应用程序是.NETFramework4.0C#应用程序。我将OracleDataAccess.dll的特定版本和本地副本设置为false

当我在本地机器上构建它时,一切正常。 我使用IL反汇编程序分析了该文件,这里的参考是确定的:

.assembly extern Oracle.DataAccess
{
  .publickeytoken = (89 B4 83 F4 29 C4 73 42 )                         // ....).sB
  .ver 4:112:3:0
}
当我在构建服务器上构建它时,我的应用程序引用了错误的OracleDataAccess.dll。 在这里我得到了这个参考:

.assembly extern Oracle.DataAccess
{
  .publickeytoken = (89 B4 83 F4 29 C4 73 42 )                         // ....).sB
  .ver 2:112:3:0
}

项目中的所有参考都指向4。。。版本我重新安装了32位和64位oracle客户端。我检查了构建服务器上的所有oracle引用,看起来一切正常。在一整天试图找出错误后,我不知道如何继续。请,有人能帮我解决这个问题吗?

在您的
*.csproj
中编辑您对ODP.NET的引用,如下所示:

    <Reference Include="Oracle.DataAccess">
      <SpecificVersion>False</SpecificVersion>
      <Private>False</Private>
    </Reference>

错误的
错误的

不需要像
Version=…
processorArchitecture=…
这样的属性。您的应用程序将加载正确的
Oracle.DataAccess.dll
,具体取决于所选的体系结构和目标.NET framework(前提是安装正确)

作为调试步骤,我建议在运行生成时对包含
Oracle.DataAccess.dll
的任何路径使用筛选器。这将帮助您识别加载此DLL的所有位置。MSBuild进程将同时加载这两个位置,即2。。和4。。版本2.112.3.0是从C:\Windows\assembly加载的,4.112.3.0是从C:\Windows\Microsoft.NET\assembly\GAC\U加载的。我删除了这些字段,但它没有改变任何内容。它仍然参考了2.112.3.0版本。我将尝试在服务器上安装Visual Studio,这可能有助于我了解DLL的加载方式。在服务器上安装Visual Studio很可能是一种过度操作(而且可能也不起作用)。看看这个:我们创建了一个构建服务器的副本,我试着做了你文章中描述的事情,但仍然使用了错误的Oracle.DataAccess.dll。我现在在新的构建服务器副本上安装了Visual Studio。在这里,我看到Oracle.DataAccess的版本是2.112.3.0,而不是4.112.3.0。我打开了和我以前在本地机器上打开的完全相同的项目,在我的机器上它引用了4。。。在生成服务器上,它引用了2。。。非常奇怪…请提供以下所有设置:应用程序的体系结构(x64或x86)、.NET Framework的目标版本、已安装Oracle客户端的体系结构和版本、GAC的内容,例如从Visual Studio Developer命令提示符运行
gacutil/l Oracle.DataAccess
。体系结构:x86(但x64存在相同问题),.NET Framework 4.0---已安装Oracle客户端11.2.0.3 x86和x64---gacutil/l Oracle.DataAccess返回:Microsoft(R).NET全局程序集缓存实用程序。版本4.0.30319.17929版权所有(c)Microsoft Corporation。好的。全局程序集缓存enthält die folgenden程序集:Oracle.DataAccess,版本=2.112.3.0,区域性=中性,PublicKeyToken=89b483f429c47342,processorArchitecture=x86 Oracle.DataAccess,版本=4.112.3.0,区域性=中性,PublicKeyToken=89b483f429c47342,processorArchitecture=x86