用vs开发工具连接的时候可以正常使用,但是打包后在本机安装,运行提示:
System.InvalidOperationException: 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。 ---> System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
有人说改变VS项目改成x86的,我看了下,项目本来就是x86的,
希望大神帮一下。
15 个解决方案
#1
64位运行X86的,没问题吧?
给亮点意见:
1.话说,你编译时用的VS的开发环境,编译时肯定不会有问题滴,改改连接找个32位机器试试打包的程序,如果行那就是兼容性文题了.
2.试试Debug目录下你编译好的你未打包的.
给亮点意见:
1.话说,你编译时用的VS的开发环境,编译时肯定不会有问题滴,改改连接找个32位机器试试打包的程序,如果行那就是兼容性文题了.
2.试试Debug目录下你编译好的你未打包的.
#2
Oracle的32位和64位问题的确比较恶心,当时我也折腾了很久
版本换过很多,结果不是那样……
解决方案看这里
http://blog.csdn.net/zouyujie1127/article/details/6371165
版本换过很多,结果不是那样……
解决方案看这里
http://blog.csdn.net/zouyujie1127/article/details/6371165
#3
本机直接运行bin文件底下的程序是可以的。
#4
你需要在本机安装32位的Oracle客户端,同时项目引用的dll也必须改为32位的才行。否则(编译为Any Cpu)就必须在项目中同时保留2个版本的Oracle.DataAccess.dll文件,根据客户机器位数选择不同的dll。
#5
才碰到过这样的问题,这是当时我对于该记录的记录:
出现错误时,系统会提示安装64位的客户端。
我们可以通过配置的方法不安装64位客户端即可正常使用。
方法一:
如果是WEB项目,那么将IIS所在的程序池右键点击高级设置,将启动32位应用程序设置为true。
方法二:
如果是winform项目,那么修改项目生成,修改成x86即可。
注意,nunit.exe默认是无法运行x86的测试项目的,需要运行nunit bin目录下的nunit-x86
出现错误时,系统会提示安装64位的客户端。
我们可以通过配置的方法不安装64位客户端即可正常使用。
方法一:
如果是WEB项目,那么将IIS所在的程序池右键点击高级设置,将启动32位应用程序设置为true。
方法二:
如果是winform项目,那么修改项目生成,修改成x86即可。
注意,nunit.exe默认是无法运行x86的测试项目的,需要运行nunit bin目录下的nunit-x86
#6
求教,打包完的EXE程序,给客户机安装的话,客户机也必须安装Oracle吗? 有别的解决方案吗?
#7
你看看微软的这个介绍http://technet.microsoft.com/zh-cn/library/k7137bfe
1.如果您的应用程序使用了 32 位组件,请确保该应用程序始终采用 32 位应用程序的运行方式。
如果应用程序项目的“平台目标”属性设置为 AnyCPU,则编译后的应用程序在 64 位或 32 位模式中均可运行。 如果采用 64 位应用程序运行方式,则实时 (JIT) 编译器便会生成 64 位本机代码。 如果应用程序依赖于某个 32 位托管组件或非托管组件,则在 64 位模式中无法加载该组件。 若要纠正此问题,请将项目的“平台目标”属性设置为 x86,然后重新编译。
2.确保未使用利用其他 .NET Framework 版本创建的组件。
如果使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集,或者使用 .NET Framework 2.0 SP1 或 .NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集,便会引发此异常。 BadImageFormatException 异常可能会报告作为编译时错误,或在运行时可能会引发该异常。 有关示例,请参见 BadImageFormatException 类。
3.确保文件映像是有效的托管程序集或模块。
当非托管动态链接库或可执行文件传递给 Load 方法进行加载时会引发此异常。
有关更多信息,Visual Basic 用户可以参见互操作性疑难解答 (Visual Basic)。
#8
如果项目不是很大,最好的办法,找个32位的新建项目重新操作以下过程试试!
#9
才碰到过这样的问题,这是当时我对于该记录的记录:
出现错误时,系统会提示安装64位的客户端。
我们可以通过配置的方法不安装64位客户端即可正常使用。
方法一:
如果是WEB项目,那么将IIS所在的程序池右键点击高级设置,将启动32位应用程序设置为true。
方法二:
如果是winform项目,那么修改项目生成,修改成x86即可。
注意,nunit.exe默认是无法运行x86的测试项目的,需要运行nunit bin目录下的nunit-x86
我默认的目标生成就是X86 WinForm
#10
我默认的目标生成就是X86 WinForm
看我二楼的帖子,当时我就是这么解决的……
http://blog.csdn.net/zouyujie1127/article/details/6371165
#11
看第四点,问题都和你一样
#12
看第四点,问题都和你一样
完全不同,那个博客写的是IIS,不是WinForm。
IIS下面,如果是64位系统,默认是运行在64位下面的,32位的程序跑上去直接报错(即使没有Oracle的访问),而楼主这个是WinForm,选择了32位运行,本身是不会报错的,但是Oracle客户端却只安装了64位的,没安装32位的,所以又报错了。
#13
看第四点,问题都和你一样
完全不同,那个博客写的是IIS,不是WinForm。
IIS下面,如果是64位系统,默认是运行在64位下面的,32位的程序跑上去直接报错(即使没有Oracle的访问),而楼主这个是WinForm,选择了32位运行,本身是不会报错的,但是Oracle客户端却只安装了64位的,没安装32位的,所以又报错了。
这样的话,我把64位 和32 位需要都装一下吗? 并且32位和64位的都引用一下?
#14
如果你的程序不跑在64位下面,64位的客户端可以不用安装。
这样的话,我把64位 和32 位需要都装一下吗? 并且32位和64位的都引用一下?
#15
解决方案就是,32/64都装了。太麻烦了。
#1
64位运行X86的,没问题吧?
给亮点意见:
1.话说,你编译时用的VS的开发环境,编译时肯定不会有问题滴,改改连接找个32位机器试试打包的程序,如果行那就是兼容性文题了.
2.试试Debug目录下你编译好的你未打包的.
给亮点意见:
1.话说,你编译时用的VS的开发环境,编译时肯定不会有问题滴,改改连接找个32位机器试试打包的程序,如果行那就是兼容性文题了.
2.试试Debug目录下你编译好的你未打包的.
#2
Oracle的32位和64位问题的确比较恶心,当时我也折腾了很久
版本换过很多,结果不是那样……
解决方案看这里
http://blog.csdn.net/zouyujie1127/article/details/6371165
版本换过很多,结果不是那样……
解决方案看这里
http://blog.csdn.net/zouyujie1127/article/details/6371165
#3
64位运行X86的,没问题吧?
给亮点意见:
1.话说,你编译时用的VS的开发环境,编译时肯定不会有问题滴,改改连接找个32位机器试试打包的程序,如果行那就是兼容性文题了.
2.试试Debug目录下你编译好的你未打包的.
本机直接运行bin文件底下的程序是可以的。
#4
你需要在本机安装32位的Oracle客户端,同时项目引用的dll也必须改为32位的才行。否则(编译为Any Cpu)就必须在项目中同时保留2个版本的Oracle.DataAccess.dll文件,根据客户机器位数选择不同的dll。
#5
才碰到过这样的问题,这是当时我对于该记录的记录:
出现错误时,系统会提示安装64位的客户端。
我们可以通过配置的方法不安装64位客户端即可正常使用。
方法一:
如果是WEB项目,那么将IIS所在的程序池右键点击高级设置,将启动32位应用程序设置为true。
方法二:
如果是winform项目,那么修改项目生成,修改成x86即可。
注意,nunit.exe默认是无法运行x86的测试项目的,需要运行nunit bin目录下的nunit-x86
出现错误时,系统会提示安装64位的客户端。
我们可以通过配置的方法不安装64位客户端即可正常使用。
方法一:
如果是WEB项目,那么将IIS所在的程序池右键点击高级设置,将启动32位应用程序设置为true。
方法二:
如果是winform项目,那么修改项目生成,修改成x86即可。
注意,nunit.exe默认是无法运行x86的测试项目的,需要运行nunit bin目录下的nunit-x86
#6
你需要在本机安装32位的Oracle客户端,同时项目引用的dll也必须改为32位的才行。否则(编译为Any Cpu)就必须在项目中同时保留2个版本的Oracle.DataAccess.dll文件,根据客户机器位数选择不同的dll。
求教,打包完的EXE程序,给客户机安装的话,客户机也必须安装Oracle吗? 有别的解决方案吗?
#7
64位运行X86的,没问题吧?
给亮点意见:
1.话说,你编译时用的VS的开发环境,编译时肯定不会有问题滴,改改连接找个32位机器试试打包的程序,如果行那就是兼容性文题了.
2.试试Debug目录下你编译好的你未打包的.
本机直接运行bin文件底下的程序是可以的。
你看看微软的这个介绍http://technet.microsoft.com/zh-cn/library/k7137bfe
1.如果您的应用程序使用了 32 位组件,请确保该应用程序始终采用 32 位应用程序的运行方式。
如果应用程序项目的“平台目标”属性设置为 AnyCPU,则编译后的应用程序在 64 位或 32 位模式中均可运行。 如果采用 64 位应用程序运行方式,则实时 (JIT) 编译器便会生成 64 位本机代码。 如果应用程序依赖于某个 32 位托管组件或非托管组件,则在 64 位模式中无法加载该组件。 若要纠正此问题,请将项目的“平台目标”属性设置为 x86,然后重新编译。
2.确保未使用利用其他 .NET Framework 版本创建的组件。
如果使用 .NET Framework 1.0 或 .NET Framework 1.1 开发的应用程序或组件尝试加载使用 .NET Framework 2.0 SP1 或更高版本开发的程序集,或者使用 .NET Framework 2.0 SP1 或 .NET Framework 3.5 开发的应用程序尝试加载使用 .NET Framework 4 开发的程序集,便会引发此异常。 BadImageFormatException 异常可能会报告作为编译时错误,或在运行时可能会引发该异常。 有关示例,请参见 BadImageFormatException 类。
3.确保文件映像是有效的托管程序集或模块。
当非托管动态链接库或可执行文件传递给 Load 方法进行加载时会引发此异常。
有关更多信息,Visual Basic 用户可以参见互操作性疑难解答 (Visual Basic)。
#8
如果项目不是很大,最好的办法,找个32位的新建项目重新操作以下过程试试!
#9
才碰到过这样的问题,这是当时我对于该记录的记录:
出现错误时,系统会提示安装64位的客户端。
我们可以通过配置的方法不安装64位客户端即可正常使用。
方法一:
如果是WEB项目,那么将IIS所在的程序池右键点击高级设置,将启动32位应用程序设置为true。
方法二:
如果是winform项目,那么修改项目生成,修改成x86即可。
注意,nunit.exe默认是无法运行x86的测试项目的,需要运行nunit bin目录下的nunit-x86
我默认的目标生成就是X86 WinForm
#10
我默认的目标生成就是X86 WinForm
看我二楼的帖子,当时我就是这么解决的……
http://blog.csdn.net/zouyujie1127/article/details/6371165
#11
看第四点,问题都和你一样
#12
看第四点,问题都和你一样
完全不同,那个博客写的是IIS,不是WinForm。
IIS下面,如果是64位系统,默认是运行在64位下面的,32位的程序跑上去直接报错(即使没有Oracle的访问),而楼主这个是WinForm,选择了32位运行,本身是不会报错的,但是Oracle客户端却只安装了64位的,没安装32位的,所以又报错了。
#13
看第四点,问题都和你一样
完全不同,那个博客写的是IIS,不是WinForm。
IIS下面,如果是64位系统,默认是运行在64位下面的,32位的程序跑上去直接报错(即使没有Oracle的访问),而楼主这个是WinForm,选择了32位运行,本身是不会报错的,但是Oracle客户端却只安装了64位的,没安装32位的,所以又报错了。
这样的话,我把64位 和32 位需要都装一下吗? 并且32位和64位的都引用一下?
#14
如果你的程序不跑在64位下面,64位的客户端可以不用安装。
这样的话,我把64位 和32 位需要都装一下吗? 并且32位和64位的都引用一下?
#15
解决方案就是,32/64都装了。太麻烦了。