三、公共语言运行时(CLR)简介

二、源代码=>程序集及程序集概念介绍中介绍了源代码通过C#编译器生成程序集(或者可执行应用程序exe)的整个过程,本文主要介绍公共语言运行时与程序集的关系.

1、

通过C#编译器编译之后生成的每个程序集既可以是可执行程序(exe),也可以使dll(其中含有一组由可执行应用程序使用的类型),最终都由CLR来管理执行这些程序集中的代码.这就意味者如果目标机器要想执行程序集,就必须安装.Net Framework.大多数windows在发售时就已经安装了.Net Framework.

2、win10下校验.Net Framework环境

(1)、判断是否安装

C:\Windows\SysWOW64在当前路径下判断是否有下图中的dll文件

如果有,说明Net Framework已安装

(2)、win10检测所有安装的.Net Framework版本,以及相关的进程Id

打开cmd,定位到clrver.exe文件的路径,执行clrver -all指令

win10下操作如下:

可以去任务管理器中校验结果.

3、windows32位版本和64位版本对编译器生成的托管模块的影响以及对CLR运行时的影响

(1)、问题 

众所周知,windows包含32位和64位两个版本,所以相同的程序集代码在这两个环境下的会有差异.分析如下:

    相同点:如果程序集文件中只包含类型安全的代码,那么代码在32位环境下和64位环境的windows中都能正常工作.源代码不需要任何改动.(只要安装了.Net Framework,且代码的类型安全,那么编译器生成EXE/DLL能同时在32位和64位下的windows中运行)

 不同点:如果你的项目中包含了类型不安全的代码,比如面向特定CPU架构的非托管代码进行相互操作,这个时候常规的做法可能无法满足这个要求.

(2)、解决方案   -使用/platform命令行开关

为了帮助那些在程序集代码中需要操作不安全代码的开发人员,C#编译器提供了一个/platform命令行开关选项.这个开关选项允许指定最终生成的程序集只能在运行32位版本的windows下x86机器、只能在运行64位windows的64位的x64机器上运行、或者只能在运行32位的Windows RT的ARM机器上使用.如果不指定平台的话,默认就是anycpu,表明最终生成的程序集能在任何版本的windows上运行.

(3)、Visual Stdio中设置目标平台的方式

右键项目-属性-生成

 (4)、项目指定目标平台后,编译器的工作方式

项目指定目标平台后,C#编译器生成的程序集会按照目标平台的配置生成相应的PE头、要么是PE32头,要么是PE32+头,除此之外,还会在头中指定要求什么CPU架构(如果是anycpu,则代表任意cpu)

(5)、win10下使用MS提供的SDK命令行实用程序DumpBin.exe和CorFlags.exe来检查编译器所生辰的托管模块的嵌入信息

CorFlags.exe

打开cmd

 DumpBin.exe

(6)、项目指定目标平台后,windows执行通过编译器生成的可执行文件的方式

windows检查文件头,判断需要32位地址空间还是64位地址空间,PE32文件在32位或64位地址控件均可运行,PE32+文件则需要64位空间地址,windows还会查头中嵌入的CPU信息,确保当前计算机的CPU符合要求,最后,Windows的64位

注:windows的64位版本可以通过Wow64(Windows on Windows64)技术运行32位Windows应用程序。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青协工作室

配置JDK环境变量

1.打开所下载的JDK安装包,点击下一步。 ? 2.点击更改可以自行选择安装路径,我这里安装到D盘,所以直接把字母C更改为D即可,然后复制更改后的安装路径(复制...

2895
来自专栏Java技术栈

超详细的 Redis Cluster 官方集群搭建指南

今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细。

2802
来自专栏遊俠扎彪

Linux下安装Oracle SQL*Plus加强工具rlwrap

Linux的SQL*Plus不太好用,通过安装rlwrap可以提高用户体验,这样就可以使用光标上下键来查找历史命令,使用退格键backspace了。

2078
来自专栏跟着阿笨一起玩NET

修改资源管理器打开后的默认路径为计算机目录的方法

本文转载:http://www.2cto.com/os/201206/135775.html

2111
来自专栏前端大白专栏

关于跨域这几天的总结

1696
来自专栏24k

在Coding.net创建项目开发

2786
来自专栏linux运维学习

linux学习第五十三篇: xshell使用xftp传输文件,使用pure-ftpd搭建ftp服务

xshell使用xftp传输文件 在xshell中按Ctrl+Alt+f打开并点击下载xftp: ? 会出现一个下载xftp插件的页面,上面的是免费...

2299
来自专栏王磊的博客

asp.net mvc3.0第一个程序helloworld开发图解

步骤一:新建asp.net mvc3.0项目 ? ? (选择Razor模板) 步骤二:创建控制器 ? ? 步骤三:控制器源码内右键创建对应视图 ? ? 步骤四:...

3326
来自专栏pangguoming

mongo 3.0 备份和还原数据库 ,及too many positional arguments错误

在mongo 3.0的操作 备份示例 ./mongodump -h localhost -d liongo -o ./ 错误方式: ./mongorestore...

9563
来自专栏Petrichor的专栏

Ubuntu: 虚拟机 安装

1123

扫码关注云+社区

领取腾讯云代金券