无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一

时间:2013-09-13 06:21:57

标签: visual-studio-2010 iis oracle11g

我正在尝试运行此Web应用程序。我一直收到这个错误 “无法加载文件或程序集”Oracle.DataAccess“或其依赖项之一。尝试加载格式不正确的程序。” 异常详细信息:System.BadImageFormatException。 “无法加载文件或程序集”Oracle.DataAccess“或其依赖项之一。尝试加载格式不正确的程序。” 以下是我已经尝试过的事情。

1)用32位oracle dll替换所有oracle dll,即2.112.3.0

我在64位机器上安装了32位客户端。操作系统是Windows 7。

2)单独编译每个项目。删除所有oracle依赖文件dll,然后单独添加2.112.3.0 dll,然后编译每个项目

3)使用此语句在GAC上注册32位dll gacutil / i%ORA_HOME4%\ odp.net \ bin \ 4 \ Oracle.DataAccess.dll

gacutil / i%ORA_HOME4%\ asp.net \ bin \ 4 \ oracle.web.dll

对于上述两个语句,我从c:\ Program Files(x86)\ Microsoft sdk \ windows \ v7.0A \ Bin \ NETFX4.0 Tools \ X64复制了gacutil.exe 到C:\ drive然后

我执行了以上两个陈述:

gacutil / i%ORA_HOME4%\ odp.net \ bin \ 4 \ Oracle.DataAccess.dll gacutil / i%ORA_HOME4%\ asp.net \ bin \ 4 \ oracle.web.dll 当我执行上述两个语句时,我没有得到任何消息,我在管理员权限下在Dos窗口中执行它们。

4)我还删除了此位置的所有临时ASP.net文件

c:\ windows \ Microsoft.Net \ V4.0.30319 \临时ASP.net文件 我还将Web应用程序构建平台目标更改为X86,最初,它位于“ANy CPU”。出于挫折感,我还尝试将平台目标更改为X64,然后我收到错误消息

“冷不加载文件或汇编.webapp”或其依赖项之一。试图加载格式不正确的程序。

我的计算机上没有安装IIS,我在visual studio 2010中运行此应用程序,因此我认为它将使用visual studio附带的内置IIS。

我花了很多时间来解决这个问题,但仍然一次又一次地遇到同样的错误。

任何帮助或提示都将受到高度赞赏。

13 个答案:

答案 0 :(得分:31)

尝试此操作:打开IIS管理器,更改应用程序池的高级设置,将启用32位应用程序更改为false。

答案 1 :(得分:24)

我通过以下步骤找到了解决方案:

  • 删除Oracle.DataAcces.dll引用,
    并添加一个新的参考:
    C:\windows\assembly\GAC\Oracle.DataAccess\X.XXX.X.XX__89b483f429c47342/oracle.dataaccess.dll
  • 使本地副本= false。

希望有所帮助

答案 2 :(得分:8)

您可能需要在AppPool中启用32位应用程序。 转到> IIS中的“应用程序池”=>右键单击您的应用程序池=>提前设置=> '启用32位应用程序'为true。

请不要忘记重启您的应用池和指向该应用池的相应应用。

答案 3 :(得分:3)

当我从一台机器移动到另一台机器并重新安装所有设备时,又出现了问题。就我而言,我正在使用32位和64位Oracle ODP.NET安装。

在我的新机器上列出程序集时,我最终得到以下列表

 C:\oracle\product\11.2.0\X64\odp.net\bin\4>gacutil /l|findstr Oracle.DataAccess
     Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.102.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.111.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.112.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.4.112.Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64

这里只能看到64位DLL。

enter image description here

我无法从web.config看到它,但我使用的是32位版本。

使用GACutil检查我的旧机器时,我看到了更多的DLL,也是X86的。

通过重新应用注册过程(此处引用的x32 / x64版本)修复

OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x32\ODP.NET\bin\4\Oracle.DataAccess.dll

OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x64\ODP.NET\bin\4\Oracle.DataAccess.dll

之后,Visual Studio是一个快乐的兔子,并为我再次编译了一切。

答案 4 :(得分:2)

在我的情况下,以下解决了这个问题:

  1. 下载“32位Oracle数据访问组件(ODAC) 使用适用于Visual Studio的Oracle Developer Tools“来自http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
  2. 然后通过浏览文件位置或仅从oracle.dataaccess.dll标签中的refence列表中向bin文件添加引用.NET

答案 5 :(得分:1)

如果您使用的是IIS Express和VS 2017:

转到“ Web应用程序属性”>“ Web选项卡”>“服务器”部分,然后将“位数”更改为x64。

答案 6 :(得分:0)

您也可以从64-bit Oracle Data Access Components (ODAC) Downloads下载并执行'ODAC112030Xcopy.zip'中的install.bat文件。这解决了我的问题。

答案 7 :(得分:0)

就我而言,我使用的是VS 2010,Oracle v11 64位。我可能会以64位模式发布(设置为"任何Cpu" Web项目配置中的模式),我可能会将生产服务器上的IIS设置为32位兼容性为假(因为服务器是64位而我喜欢利用它。)

然后解决问题"无法加载文件或汇编' Oracle.DataAccess'":

  • 在本地PC和服务器上安装了Oracle v11,64位。
  • 在所有Local Dev PC中,我引用了64位的Oracle.DataAccess.dll(C:\ app \ user \ product \ 11.2.0 \ client_1 \ odp.net \ bin \ 4)。
  • 在IIS Production Server中,我将32位兼容性设置为False。
  • System.Web.Mvc.dll中Web项目中的引用是本地PC中的v3.0.0.1版本,但是在Production中只有 instaled MVC 3.0.0.0版。因此,修复程序可以与MVC一起使用 3.0.0.0而不是3.0.0.1并在服务器上再次发布,它可以工作。

答案 8 :(得分:0)

对我来说其他一切都差不多,但不知怎的,我的项目设置发生了变化。 iisExpress被用来代替IISLocal。当我改变&指向虚拟目录(在IISLocal中),它再次完美地工作。

答案 9 :(得分:0)

我需要oracle.dataaccess.dll的64位版本,但这导致我正在使用的其他库出现问题。

  

[BadImageFormatException:无法加载文件或程序集'Oracle.DataAccess'或其依赖项之一。试图加载格式错误的程序。]

我遵循了以上几个步骤。要在项目池上进行高级设置以切换允许32位工作,但是我不满意将其保留为原来的样子,所以我将其重新打开。

我的项目还具有依赖于 Elmah log4net 引用的引用。 我下载了这些文件的最新版本,并且我的项目能够在不影响池的允许32位设置的情况下构建并正常运行。

答案 10 :(得分:0)

我遇到了同样的问题,并通过使用新的 Oracle.DataAccess.dll (安装时与oracle客户端一起提供)替换了旧的 Oracle.DataAccess.dll 而解决了

在我的情况下,新 Oracle.DataAccess.dll 的路径为

  • E:\ app \ Rehman.Rashid \ product \ 11.2.0 \ client_1 \ ODP.NET \ bin

答案 11 :(得分:0)

我在使用Oracle.DataAccess时遇到了相同的错误,但是部署到Azure网站(azurewebsites.net)。对我而言,我必须先在VS.NET 2019中编辑设置,然后才能发布到Azure。我在Tools > Options > Projects and Solutions > Web Projects下选中了“使用IIS Express的64位版本的网站和项目”复选框。

答案 12 :(得分:0)

就我而言,我有一个控制台应用程序,我只是在 Build projet 属性选项卡上取消选中 Prefer 32-bit,然后将其添加到我的 app.config 中:

<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="2.112.1.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>