2023年12月11日发(作者:)
关于打包C#程序的x86、x64以及framwork配置相关问题分析
前言:
在进行完c#的winform程序开发后,需要编译成release版的可执行文件发布给客户,而在打包的过程中,会涉及目标平台的选择、
framwork的选择。若选择不当,则会导致在客户电脑上无法运行的情况。
所以出现无法运行的情况,原因有二:一是目标平台没选对, framwork没匹配。
什么是目标平台呢?
1、目标平台
目标平台指的是PC的CPU,这里又特指CPU的内核架构。对于通用CPU来说,目前只有Intel和AMD两家公司的产品,为了实现不同型号
的cpu之间,机器码的通用性,约定了架构的规范,也就是微处理器执行的计算机语言指令集。
Intel从8086开始,286、386、486、586、P1、P2、P3、P4都用的同一种CPU架构,统称X86。现在说X86一般指32位的CPU;
“x86-64”,有时会简称为“x64”,是64位微处理器架构及其相应指令集的一种,也是Intel x86架构的延伸产品。
X86的cpu只能安装32位的操作系统;X86-64的cpu可以安装32位以及64位的操纵系统,但是还需要看内存的大小,若小于4G,也是没
有必要安装64位系统的。对于应用程序,64位系统可以运行32位和64位的应用程序,而32位系统只能运行32位的应用程序。
这里的CPU的内核架构只是CPU参数的其中一个,除此之外还有主频,外频,倍频,接口,缓存,制造工艺,电压,封装形式,整数单元
和浮点单元等。在windows系统下可以使用驱动精灵来查看CPU参数,在ubuntu系统下,可以输入lscpu:
那如何选择目标平台呢?
1.1 目标平台的选择
有三种选择:Any_CPU、X86、X64。同时,这里涉及到编译exe和dll,因为一个应用程序多少会引用第三方类库(dll文件)。
Any CPU编译的dll,被哪种类型的程序(exe)调用,就会编译成哪种类型的dll。
Any CPU编译的exe,取决于当前的操作系统,若是64位系统,就编译成X86的。
当然,若指定x86和x64,也就对应生成该类型的dll和exe.所以,在编译exe、配置目标平台时,需要考虑:
1.引用的dll是什么类型的;
2.客户的PC是多少位的系统。
最方便的一种就是,Any CPU编译的dll 加上 X86编译的exe,可以在任何PC上运行。当然也有缺点,就是64系统来运行X86应用程序,
利用效率不高。
3.本质
代码打包后不能运行的本质是:依赖了出问题,可以是依赖的.net环境、操作系统、配置文件的部署等等。


发布评论