zoukankan      html  css  js  c++  java
  • 三、加载公共语言运行时

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

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

    2、win10下校验.Net Framework环境

    (1)、判断是否安装

    C:WindowsSysWOW64在当前路径下判断是否有下图中的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位版本可以通过Wow64(Windows on Windows64)技术运行32位Windows应用程序。

  • 相关阅读:
    新手Android开发:onclicklistener到底怎么用?
    Myeclipse中web project 与java project区别
    <jsp:directive.page import=""/>的用法和解释
    怎样在myeclipse下,打开已有的项目
    有史以来最简单的三层实例(C#)
    show()跟showdialog()的区别
    献给和我一样的Java初学者——用UltraEdit代替“笨重”的IDE,实现轻巧编程!
    数据库连接错误——请求失败或服务器未及时响应
    说说二级C++
    十一张图让你轻松学会用VS打包
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/8288648.html
Copyright © 2011-2022 走看看