前言 Foreword

自从2005年CLR 2.0发布之后, Microsoft有几年没有更新CLR了. 现在新的版本CLR 4.0即将发布. 本人看了几个英文博文. 综合起来, 摘录其要点. 用一个系列介绍几个CLR4.0的新特性. 为照顾英文不好的同学, 特用中英文对照的形式.

Microsoft has not upgraded CLR for years since it released CLR 2.0 in 2005. The new CLR 4.0 is about to release. I read English posts on internet. Do a summary and grab the important points in the English posts. I am going to make a series of posts about what’s new in CLR 4.0. The post is talking about “Type embedding”.

类型嵌入 Type embedding

过去我们用.net开发,部署Office应用时, 我们必须引入Office PIA(Primary interop assembly). 当部署之时, 我们必须在目标机器上安装Office PIA. 虽然Office PIA 体积不大(6M多), 但是这给我们多少带来一些不便.现在CLR4.0的类型嵌入特性给我们提供了一些方便.下面来比较一下: 过去我们开发Office应用, 需要加入Office PIA的引用, 编译后你的Bin目录会有你的程序集和Office PIA的程序集. 当你的应用程序运行之时,你会发现你的应用程序装入了Office PIA的程序集. 在CLR4.0中, 你可以通知CLR将你引用的那些Office PIA的类型嵌入到你的程序集中. 这样在部署之时, Office PIA的程序集就不必一同部署到目标机器上. 具体怎么做呢?

When we develop Office applications using .net in the past, we need to add references to the assemblies of Office PIA. When we deploy the applicaitons, we have to install Office PIA also on the target machines. The size of Office PIA is not so big(about 6M), but it still not convenient enough. Now CLR 4.0 represents us a feature called “Type embedding”. This will provides us conveniency. Let’s work through how we develop Office applications in previous versions of CLR. First step, we need to add reference to Office PIA assemblies, after compiling there are Office PIA assemblies in your bin folder along with your application’s assemblies. If you try to debug your application, you will find your application assembly loads Office PIA assemblies in memory also. In CLR 4.0, you can send a note to CLR that CLR only embeds the types your applicaiton referencing into your assembly. This way you do not need install Office PIA on target machines together with your applicaiton. How to do this?

首先在Visual Studio 2010中加入Office PIA的引用(这和过去一样), 然后在展开引用(References)节点, 找到Office PIA的引用, 在属性(Properties)窗口, 有一个”嵌入互操作类型”(Embed Interop Types), 将其设置成真(True), 再重新编译.

First step you need to add reference to Office PIA assemblies in Visual studio 2010(This is the same as what we did in the past), and then extend the “References” node of your project, click the Office PIA assembly, in “Properties” window, set “Embed interop Types” to True, and compile again.

CLR只将你引用到的类型放入你的程序集中, 同时在你引用到的类型之下, CLR只将你用到的方法和成员以原名称存入你的程序集. 那些未调用的方法将以一个_VtblGap调用来代替, 这些方法的名称将变成以_VtblGap开头的名字.

The CLR rips only the types necessary to complete the calls you have made from your application, and CLR extracts only the methods you have called and replaced all the other methods and Type members with the magic _VblGap calls. Those _VtblGap pseudo methods are emitted in place of unused methods to maintain vtable compatibility.

类型嵌入的限制 Limitations

不能嵌入IL (Can’t embed IL, meaning no classes or static method)

只有元数据能嵌入(接口, 代理, 枚举, 结构) Only metadata is locally embedded (interfaces, delegates, enums, structs )

只有从COM得到的类型才能嵌入. 并且编译器检查这些标签. Only types from Interop Assemblies can be embedded. Compilers check for these attributes

a. [assembly:Guid(…)]

b. [assembly:ImportedFromTypeLib(…)]

参考文献

Ahme的blog  “CLR 4.0: Type Embedding”   http://eknowledger.spaces.live.com/blog/cns!F475D4DE444DB1AB!3238.entry     此博文是英文的, 还配有图片, 英文好的同学可以读读.

mikelij 于 2009.3.8. 23:09

CLR 4.0 有哪些新东西? What's new in CLR 4.0--类型嵌入 Type embedding相关推荐

  1. CLR 4.0 有哪些新东西? -- 类型等价

    CLR 4.0 有哪些新东西? -- 类型等价 我上篇博文说到了CLR 4.0类型嵌入特性, 那么请大家想一想类型嵌入是谁实现的? 选项A   CLR    选项B  编译器  选项C TlbImp  ...

  2. CLR 4.0有哪些新东西? -- 状态错乱异常 Corrupted state Exception

    状态错乱异常Corrupted state Exception 根据评论, 又去看了更多的英文资料. 对此文进行了修改. 感谢大家的意见. 有人叫它超级异常. 指的是操作系统提出的未捕获异常, 例如: ...

  3. vs2008中C#3.0语言的新特性

    看了YJingLee's Blog的文章,收获很大,以下文章转自http://www.cnblogs.com/lyj/archive/2008/01/08/1030525.html 总体来说,Visu ...

  4. 进制转换 位运算(包括补码、原码、反码、~0等一些零碎东西一次说清)

    我发现网上关于标题上的内容介绍的都很零碎,因此为了方便查找.也为了本人对这一部分的充分理解,就想着写一篇这样的博客(我分成了几个部分,以便查找): 一.进制转换 让我们先来看看各个进制的定义: 十进制 ...

  5. .NET 4.0有一个新的GAC,为什么?

    本文翻译自:.NET 4.0 has a new GAC, why? %windir%\\Microsoft.NET\\assembly\\ is the new GAC . %windir%\\Mi ...

  6. 史上最快、最强大的Gradle 5.0发布,新特性全解

    Gradle 5.0是有史以来速度最快.最安全.最强大的Gradle版本,这是Gradle官方给出的评价,v5.0 新增的功能主要包括: 在构建缓存和更新检查功能的基础之上,Gradle 5.0又改进 ...

  7. 华为新平板鸿蒙,华为新平板将发布,搭载鸿蒙2.0系统

    现在智能手机的操作系统是iPhone手机的iOS系统跟谷歌安卓系统的天下,iOS系统只有iPhone手机可以使用,而其他智能手机使用的是安卓系统. 华为高端旗舰手机华为mate40系列手机很快就要发布 ...

  8. JAVA 虚拟机深入研究(二)——JVM虚拟机发展以及一些Java的新东西

    内容目录: JAVA 虚拟机深入研究(一)--关于Java的一些历史 JAVA 虚拟机深入研究(二)--JVM虚拟机发展以及一些Java的新东西 这是第二篇,我们来说说有关虚拟机的发展. 一说到虚拟机 ...

  9. 华为平板 鸿蒙2.0,华为新平板将发布,搭载鸿蒙2.0系统

    现在智能手机的操作系统是iPhone手机的iOS系统跟谷歌安卓系统的天下,iOS系统只有iPhone手机可以使用,而其他智能手机使用的是安卓系统. 华为高端旗舰手机华为mate40系列手机很快就要发布 ...

最新文章

  1. ZOJ 3700 Ever Dream(模拟)
  2. Light Head R-CNN论文笔记
  3. 数据结构(哈夫曼树+KMP)之 数据加密+解密
  4. JDK 8时代的抽象类与接口
  5. SenchaTouch2.3.1 中使用listpaging以及pullrefresh插件 做的分页示例
  6. Linux 服务器感染kerberods 病毒
  7. 精彩案例:一碗牛肉面的思考
  8. 【嵌入式Linux+ARM】ARM体系结构与编程(ARM概述)
  9. Java 案例三 随机点名器
  10. 战旗html5播放器为什么卡顿,视频站启用html5播放器
  11. 宋晓丽20190905-1 每周例行报告
  12. Java随机生成四位数字(四位整数)Random类
  13. 整理的程序员使用利器(工具)
  14. 【游戏】泡泡堂街机版(不需模拟器)
  15. 美图秀秀2013年6月5日实习生招聘题目
  16. JAVA给你讲它的故事
  17. 产品经理考个 PMP 有用吗?
  18. C/C++Linux后台开发(入门到精通) 学习路线-架构师篇
  19. 过来人对于在校生找工作的一点看法 很有感触!
  20. python win32api

热门文章

  1. 电商常用字体_字体商用有风险,侵权罚款上千万!告诉你怎么正确使用
  2. 产品结构bom设计 mongodb_产品设计人员看过来!儿童智能机器人产品结构设计解析(二)...
  3. html怎么添加遮罩层,如何在浏览器窗口上添加一个遮罩层
  4. vue.js能美化界面吗_美牙真的能变美吗?刘涛花百万美化牙齿,容貌大变样,网友:太神奇了吧...
  5. 北理工远程教育在线作业统考计算机,北理工19春《操作系统》在线作业【标准答案】...
  6. android带动画的饼图,Android部分源码资源共享(视屏转GIF图片工具、仿抖音、仿朋友圈、仿红包、饼状图、引导图,图灵源码等)...
  7. 服务器开机后显示f1 f2,电脑开机总是提示按f1 f2问题的解决办法
  8. e7用什么主板_主板当中的纽扣电池有什么用?电池没电了会怎样?
  9. 最新发布|深度学习必学“圣经”花书出视频课了!附带论文代码精读讲解!
  10. python优雅编程_Python——traceback的优雅处理