.net应用程序有32位和64位之分?

Daven172 2014-07-09 07:21:26
大家都知道,平时我们写C#程序时,一般都不会关心目标平台的问题,默认情况下也是选的Any CPU。前段时间在运行一个操作Access数据库程序的时候,出现了问题,提示是:未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 。这个程序是我在32位的WinXP上写的,编译运行没有问题。而现在的电脑换成了64位的Win8.1,就运行不起来了。然而,把目标平台改为x86,再编译运行则正常。
我感到很奇怪,按理说C#代码是编译成IL中间代码的(即那个exe),并不像C/C++那样直接编译成Native Code,为什么会有32位和64位之分呢?不是.net虚拟机区分32位和64位就行了吗?
...全文
458 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
汇智联创 2014-07-31
  • 打赏
  • 举报
回复
Microsoft.Jet.OLEDB.4.0 这个32位的
Daven172 2014-07-31
  • 打赏
  • 举报
回复
我看了《CLR Via C#》之后明白了,基本上和上面的解释一致
於黾 2014-07-10
  • 打赏
  • 举报
回复
主要是DLL分32位和64位,所以程序以64位运行,会找不到32位的DLL
宝_爸 2014-07-10
  • 打赏
  • 举报
回复
真正执行Native code肯定是区分的。
devmiao 2014-07-09
  • 打赏
  • 举报
回复
程序集本身固然不区分32bit/64bit,但是InterOP调用Native Code还是区分的。
CGabriel 2014-07-09
  • 打赏
  • 举报
回复
因为那个 Microsoft.Jet.OLEDB.4.0 是一个纯粹的 x86 程序集,在 x64 的电脑上面, AnyCpu 会被解析称 x64 的程序,所以就找不到了。 指定目标平台为 x86 之后,编译出来的程序无论在哪里都会被解析称 x86 的程序,所以就没有问题了。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧