我正在尝试运行此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。
我花了很多时间来解决这个问题,但仍然一次又一次地遇到同样的错误。
任何帮助或提示都将受到高度赞赏。
答案 0 :(得分:31)
尝试此操作:打开IIS管理器,更改应用程序池的高级设置,将启用32位应用程序更改为false。
答案 1 :(得分:24)
我通过以下步骤找到了解决方案:
Oracle.DataAcces.dll
引用,C:\windows\assembly\GAC\Oracle.DataAccess\X.XXX.X.XX__89b483f429c47342/oracle.dataaccess.dll
希望有所帮助
答案 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。
我无法从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)
在我的情况下,以下解决了这个问题:
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'":
答案 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 的路径为
答案 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>