C# 尝试使用DLL会导致错误

C# 尝试使用DLL会导致错误,c#,.net,.net-3.5,C#,.net,.net 3.5,我使用的库(DLL)使用Oracle.DataAccess DLL连接到数据库。 我正在使用C#.NET framework 3.5 当我尝试编译时,会进行编译,但可执行文件会抛出此错误消息 Could not load file or assembly 'Oracle.DataAccess, Version=2.111.7.20, Culture= neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An

我使用的库(DLL)使用Oracle.DataAccess DLL连接到数据库。 我正在使用C#.NET framework 3.5

当我尝试编译时,会进行编译,但可执行文件会抛出此错误消息

Could not load file or assembly 'Oracle.DataAccess, Version=2.111.7.20, Culture=
neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt
 was made to load a program with an incorrect format.

有什么办法可以解决这个问题吗?发生这种情况的原因是什么?

该ODBC的dll可能是一个仅32位的dll。你在64位机器上使用这个吗?如果是,IIS 7在应用程序池中有一个选项,允许您“启用32位应用程序”。

该ODBC的dll可能是一个仅32位的dll。你在64位机器上使用这个吗?如果您是,IIS 7在应用程序池中有一个选项,允许您“启用32位应用程序”。

一种可能性:您的程序是用64位计算机上的x64或任何CPU编译的,但dll是在仅支持x86的情况下编译的。
如果将解决方案(或项目)的平台形式更改为x86,则可以克服此问题

我知道您可以通过以下方式强制64位程序集作为32位应用程序运行:

corflags /32bit+ Oracle.DataAccess.dll
这是因为MSIL代码没有绑定到处理器体系结构。但我从未尝试过另一种方式:

corflags /64bit+ Oracle.DataAccess.dll

所以我不知道这是否有效。如果dll具有非托管依赖项,则我可能无法工作。

一种可能性:您的程序是使用64位计算机上的x64或任何CPU编译的,但dll是在仅支持x86的情况下编译的。
如果将解决方案(或项目)的平台形式更改为x86,则可以克服此问题

我知道您可以通过以下方式强制64位程序集作为32位应用程序运行:

corflags /32bit+ Oracle.DataAccess.dll
这是因为MSIL代码没有绑定到处理器体系结构。但我从未尝试过另一种方式:

corflags /64bit+ Oracle.DataAccess.dll

所以我不知道这是否有效。如果dll具有非托管依赖项,我可能无法工作。

您使用的是什么操作系统-是32位还是64位?您使用的是什么操作系统-是32位还是64位?我使用的是32位操作系统。我使用的是windows XP。OracleDataAccess.dll是一个64位dll。我刚用垃圾桶找到这个。这就是我使用的32位exe-->32位Dll-->32位Dll-->64位Dll(Oracle DataAccess.Dll)我使用的是32位操作系统。我使用的是windows XP。OracleDataAccess.dll是一个64位dll。我刚用垃圾桶找到这个。这就是我的用法是32位exe-->32位Dll-->32位Dll-->64位Dll(Oracle DataAccess.Dll)corflags:错误CF012:指定的文件具有强名称签名。使用/Force强制更新。如果我使用武力,这就是我得到的信息。corflags:警告CF011:指定的文件是强名称签名文件。使用/Force将使此映像的签名无效,并要求程序集退出。使用Force时,您将收到消息,但文件也将被修改。如果你不需要强名称,那么你应该很好。无论如何,我建议将您的主要项目(即.exe)目标平台设置为x86(请看我的第一个建议),并将您自己的dll设置为“任意CPU”。这些都不是我自己的dll。exe是我唯一拥有的代码。32位exe-->32位Dll-->32位Dll-->64位Dll(Oracle DataAccess.Dll)我已将可执行文件设置为目标x86平台。更改该文件并没有被证明是有用的。此dll是原始Ocacle文件还是仅是名为“Ocacle.DataAccess.dll”的第三方dll?如果它来自Oracle本身,请获取一个32位副本(可能来自这里:)并用它替换dll。我就是这么做的。谢谢Schlaviener。我还必须使用GACUtil.exe清除GAC。现在,我的程序在编译时会抛出警告,但它的执行方式与我希望的一样。corflags:error CF012:指定的文件是强名称签名的。使用/Force强制更新。如果我使用武力,这就是我得到的信息。corflags:警告CF011:指定的文件是强名称签名文件。使用/Force将使此映像的签名无效,并要求程序集退出。使用Force时,您将收到消息,但文件也将被修改。如果你不需要强名称,那么你应该很好。无论如何,我建议将您的主要项目(即.exe)目标平台设置为x86(请看我的第一个建议),并将您自己的dll设置为“任意CPU”。这些都不是我自己的dll。exe是我唯一拥有的代码。32位exe-->32位Dll-->32位Dll-->64位Dll(Oracle DataAccess.Dll)我已将可执行文件设置为目标x86平台。更改该文件并没有被证明是有用的。此dll是原始Ocacle文件还是仅是名为“Ocacle.DataAccess.dll”的第三方dll?如果它来自Oracle本身,请获取一个32位副本(可能来自这里:)并用它替换dll。我就是这么做的。谢谢Schlaviener。我还必须使用GACUtil.exe清除GAC。现在,我的程序在编译时会抛出一个警告,但它的执行就像我想要的一样。