如何理解.NET开发中的x86/x64/AnyCPU
来源:互联网 发布:韩佳人长相分析知乎 编辑:程序博客网 时间:2024/06/09 18:14
在VisualStudio中项目平台属性包含x86/x64/AnyCPU三个选项,之前的项目中并没有特别去关注这一点,最近的项目中涉及到了在不同平台运行的问题,所以专门了解并整理了这方面的知识。
x86/x64/AnyCPU的含义
在vs中这一选项被称为“目标平台”,也就是编译成功的项目最终是要在什么平台上运行。
x86/x64/AnyCPU的区别
我们使用.NET平台开发程序所构造的项目被称为“程序集”,程序集的输出类型有Windows应用程序、控制台应用程序、类库。使用频率较高的是Windows应用程序和类库。Windows应用程序一般包括我们常见的WinForm、WPF程序,文件格式通常为可执行文件(.exe);类库一般是WEB程序或动态链接库,文件格式通常为.dll。
关于x86/x64/AnyCPU之间的区别,我们就看一看exe和dll两类文件在不同平台的操作系统上运行的结果。
x86操作系统
x64操作系统
从上面的运行结果来看我们可以基本确定一个结论:
主程序和其引用的类库在运行时的平台应该保持一致。
不过这样理解起来还是有些问题,我们举几个例子:
1. AnyCPU的应用程序+AnyCPU的类库
在x86的操作系统上,应用程序会在32位CLR上运行,所以它引用的类库也会在32位CLR上运行;
在x64操作系统上,应用程序许会在64位CLR上运行,所以它引用的类库也会在64为CLR上运行。
2. x86的应用程序+AnyCPU的类库
在x86的操作系统上,应用程序会在32位CLR上运行,它引用的类库也会在32位CLR上运行;
在x64的操作系统上,应用程序会在WOW下的32位CLR上运行,它引用的类库也会在WOW下的332位CLR上运行。
3. x64的应用程序+AnyCPU的类库
在x86的操作系统上,应用程序无法运行,更不要说引用类库了;
在x64的操作系统上,应用程序会在64位CLR上运行,引用的类库也会在64位CLR上运行。
4. AnyCPU的应用程序+x64的类库
在x86的操作系统上,应用程序会在32位CLR上运行,但引用的类库无法在32为CLR上运行,程序报错;
在x64的操作系统上,应用程序会在64位CLR上运行,引用的类库也会在64位CLR上运行。
5. AnyCPU的应用程序+x86的类库
在x86的操作系统上,应用程序会在32位CLR上运行,引用的类库也会在32位CLR上运行;
在x64的操作系统上,应用程序会在64位CLR上运行,但引用的类库无法在64位CLR上运行。
有了以上的例子,是不是有点明白了?当然我们的主程序并不限于应用程序exe,不要忘了常见的Web应用的主程序就是类库,不过原理还是一样的:主程序和引用类库在运行时的平台要保持一致。
一般来讲,我们可以把主程序的目标平台根据实际需求设置为跟部署的操作系统一致,类库最好是AnyCPU。当然特殊的部署环境还要特殊考虑。
未能加载文件或程序集”xxxx”或它的某一个依赖项,试图加载格式不正确的程序。
那么下次遇到上面这个错误时,就要好好检查下是不是项目的目标平台设置不对了。
- 如何理解.NET开发中的x86/x64/AnyCPU
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
- .NET编译的目标平台:AnyCPU,x86,x64
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于NET编译的目标平台(AnyCpu,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 目标CPU中的“anyCPU”“x86”“x64”“Itanium”区别
- 编译anycpu 引用X86或X64问题
- .NET Framework x86 vs 64 vs anycpu
- VS x86 x64 anycpu 编译运行对照表
- .net 编译时选择anycpu x86 x64的区别: 在 64 位 Windows 操作系统上: 用 x86 编译的程序集将在 WOW64 下运行的 32 位 CLR 上执行。 用 x64 编译
- Android网络编程TCP、UDP(一)
- 华为OJ——合法IP
- 更改JDK默认编码
- 【学习OpenCV】flip函数、镜像操作
- 知道这20个正则表达式 能让你少写1,000行代码
- 如何理解.NET开发中的x86/x64/AnyCPU
- RabbitMQ消息队列一
- php中变量与常量的区别
- 分享一个飞鸽传书源码
- 华硕台式机VT-x设置
- Dedecms 生产环境安全设置
- SpringMVC的各种参数绑定方式
- C# 高级特性(一) LINQ
- 怎样设置Android Studio自动编译工程