最近在C#项目中嵌入一个视频软件Ffplayer,出现报错现象,提示平台开发视频.dll文件的兼容性和加载格式不正确的问题。最终查看是由于项目平台选择的是Any CPU和X86的引起的。目标平台有什么作用,各选项有什么差别。

一、在VisualStudio中,在编译设置中有如下选项:

x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行。

x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行。

anycpu:(默认值)将程序集编译为在任意平台上运行。

Itanium: 将程序集编译为由采用 Itanium 处理器的计算机上的 64 位公共语言运行库运行。

二、具体行为如下:

1)在 64 位 Windows 操作系统上:

用 x86 编译的程序集将在 WOW64 下运行的 32 位 CLR 上执行。

用 x64 编译的程序集将在 64 位 CLR 上执行。

用 anycpu 编译的可执行文件将在 64 位 CLR 上执行。

用 anycpu 编译的 DLL 将在与加载它的进程相同的 CLR 上执行。

2)在 32 位 Windows 操作系统上:

用 x86或anycpu 编译的程序集将在 32 位 CLR 上执行。

用 x64 编译的程序集无法运行。

说明:现在大多数用户使用的都是在WINXP以上的系统中运行程序(不管是32位的还是64位的),因此,基本不可能选择X64的编译程序集。 是不是都选择Any CPU这种默认方式就不会存在问题了呢?

首先看看Any CPU和x86的可执行文件(EXE)在32位和64位下有什么区别:Any CPU在32位下,EXE将以32位执行,而在64位下,EXE将以64位执行。而x86的话,始终以32位执行。

如果用户希望使用x86,也就是不希望64位下用64位方式执行EXE程序。系统中可能存在第三方的32位DLL,一旦使用64位执行的EXE,在调用到32位的DLL时,将无法调用。

如果用户希望使用Any CPU,是因为DLL的实际运行方式是受调用它的EXE所影响的,因此设为Any CPU就可以了(即选择默认)。而如果设定为x86,虽然看似没什么问题,但其无法在64位CLR中运行了,存在缺陷。

C# 平台问题的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  3. Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...

  4. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  5. 标准产品+定制开发:专注打造企业OA、智慧政务云平台——山东森普软件,交付率最高的技术型软件公司

    一.公司简介山东森普信息技术有限公司(以下简称森普软件)是一家专门致力于移动互联网产品.企业管理软件定制开发的技术型企业.公司总部设在全国五大软件园之一的济南齐鲁软件园.森普SimPro是由Simpl ...

  6. 我为Net狂 ~ 社交平台系列小集合!

    微信平台: 我为Net狂(dotNetCrazy) 资源贴吧: http://tieba.baidu.com/f?kw=毒逆天 个人博客: http://dunitian.cnblogs.com/ h ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(76)-微信公众平台开发-网页授权

    前言 网页授权是:应用或者网站请求你用你的微信帐号登录,同意之后第三方应用可以获取你的个人信息 网上说了一大堆参数,实际很难理解和猜透,我们以实际的代码来演示比较通俗易懂 配置 实现之前我们必须配置用 ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(70)-微信公众平台开发-成为开发者

    系列目录 前言: 一.阅读这段系列之前,你必须花半天时间大致阅读微信公众平台的API文档,我尽量以简短快速的语言与大家分享一个过程 二.借助微信公众平台SDK Senparc.Weixin for C ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(69)-微信公众平台开发-功能概述

    系列目录 为什么要先发这个文章? 因为接下来的文章是关于微信开发的系列,心中一定要有一个概念,知道自己接下来要做什么功能. 而且微信到处都是坑,我首先要把微信与本地跑通起来才敢发布,否则中间出现坑导致 ...

  10. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

随机推荐

  1. java反射机制_读取properties

    代码: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 反射特点: ...

  2. jQuery $(document).ready()和JavaScript window.onload()事件的区别

    一. 在网上查了一下,发现$(document).ready()是在DOM树加载完成时触发,而window.onload()则是在整个页面全部加载完成时触发.下面是一些验证. var start=+n ...

  3. [Mysql 查询语句]——对查询结果进一步的操作

    distinct 不显示重复的查询结果 (1) 对于表中一些没有唯一性约束的字段,可能存在重复的值,这时可以使用distinct来消除那些查询结果中的重复值 select cust_id  from ...

  4. oracle:存储过程和触发器

    存储过程(stored procedure) :可以看作带名字的pl/sql程序块:通过名字调用执行:可以带参数或不带参数. 触发器(trigger):通过事件触发执行,可看成特殊类型的存储过程. 下 ...

  5. c#和java中封装字段的不同

    c#: private String name; public String Name { get { return name; } set { name = value; } } .csharpco ...

  6. Nginx proxy buffer相关的设置和解释

    proxy_buffer_size 4k; proxy_buffering on;proxy_buffers 4 4k;proxy_busy_buffers_size 8k;proxy_max_tem ...

  7. MUI框架 picker日期选择器实例

    MUI官方文档点我 (一)准备工作,下载相关的js.cs文件,地址 (二)新建普通html页面 1)引入相关js.cs文件 2) 一个input,记录下id: <form> <lab ...

  8. 撩课-Python-每天5道面试题-第5天

    一. 给定一个圆心和半径, 以及一个点坐标, 判定该点是否在圆内; 例如: 用户输入圆心: (1, 2) 半径: 2.5 测试点为(2, 2)结果: 判定测试点是在圆内 思路: 结合勾股定理, 计算测 ...

  9. VMwear安装Centos7详细过程

      1.软硬件准备软件:推荐使用VMwear,我用的是VMwear 10镜像:CentOS7   硬件:因为是在宿主机上运行虚拟化软件安装centos,I3CPU双核.硬盘500G.内存4G以上. 2 ...

  10. scrum 项目的基本模式

    scrum 项目中有 3 个主要的角色:产品所有者, Scrum 主管和团队成员 产品所有者和团队其他成员一起工作,负责维护生产积压工作表 (production backlog) ,并对表中的项制定 ...