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环境、操作系统、配置文件的部署等等。