张羿的CSDN专栏

.NET/CLR 4.0开发中~~

2009年06月17日

置顶 原创 CLR 4.0 Beta1新功能:Stub Method Redirection

.NET Framework v4.0和VisualStudio 2010 Beta1已经出来有阵子了,估计有些喜欢尝鲜的朋友已经下载试用了。这一次发布包含了大量的新功能。我们上海CLR开发团队会编写一系列的文章介绍Interop的相关新功能。我来给大家简单介绍一下Stub Method Redirection功能。这个功能是CLR上海开发团队设计、开发并测试的新功能之一,这一次我们上海CLR小组共开发了下面几个功能 1. Managed TlbImp (Rewrite) 2. Stub Method Redirection 3. IL Stub ETW Diagnostics 4. Custom QueryInterface 而在CodePlex上面: 1. 发布了TlbImp的最新版本,包括基于规则的Customization(具体可以参考:这一篇) 2. 即将发布IL Stub Diagnostics Tool,可以方便大家直接观看IL Stub,内部使用IL Stub ETW Diagnostics新功能实现 除此之外,还有一些功能是由美国团队开发的: 1. 阅读全文>

发表于 @ 2009年06月17日 13:28:00|评论(loading...)|举报|收藏

2009年03月13日

置顶 原创 CodePlex上TlbImp新版本发布:基于规则的自定义功能

大家好。距离上次我们发布在CodePlex上的新版本TlbImp已经过了快半年了。在这半年的时间内,除了主要进行.NET 4.0相关的新功能开发之外,我们上海CLR小组也没有忘记进行TlbImp相关功能的继续开发,于今年3月9日再次发布了TlbImp的一个新版本: http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=17579 这次版本中我们引入了两个重要功能: 1. 通过规则自定义互操作程序集以及规则自定义编辑器 2. 回归测试工具 基于规则的自定义功能 我们先来看一下自定义功能。这个新版本的TlbImp允许用户通过自定义的一系列的规则来指定TlbImp如何生成最终的互操作程序集。之前有不少用户向我们提到在使用TlbImp的时候,经常需要对TlbImp生成的结果做一些修改,而且必须是自动化的修改。他们通常使用的方法是先使用ILDASM反汇编,使用Perl脚本修改反汇编代码,然后再使用ILASM重新生成互操作程序集。为了解决这个问题,我们引入了一个新功能,允许用户以非常自由的方式阅读全文>

发表于 @ 2009年03月13日 15:53:00|评论(loading...)|举报|收藏

2009年06月17日

原创 MSDN Webcast预告:.NET 4.0中的新特性系列课程(3):.NET 4.0 Beta1 Interop 新特性介绍 (Level 200)

在最新一期的.NET 4.0新特性系列课程中,我和我的同事将给大家介绍Beta1中的一些新特性,具体信息如下: .NET 4.0中的新特性系列课程(3):.NET 4.0 Beta1 Interop 新特性介绍 (Level 200) 讲 师:张羿、朱永泰  课程简介:.NET 4.0 Beta1在Interop,也就是互操作功能上有了较大的改进,主要是能够帮助开发者更自由的自定义互操作的行为,以及查找互操作中出现的错误。这次讲座我们主要介绍4个新特性:NOPIA、Customization of Com interop stubs、interop stub diagnostics, Custom QI。 Update:因为时间关系,我们只介绍Stub Method Redirection(也就是Customization of COM interop stubs), Custom QI, IL stub diagnostics。其中Stub Method Redirection我们已经有一篇文章提及,详情请点击这里。阅读全文>

发表于 @ 2009年06月17日 17:33:00|评论(loading...)|举报|收藏

2009年05月19日

原创 MSDN中文网络广播预告:公共语言运行库(CLR)开发系列课程(6):.NET中间语言(IL)入门 (Level 200)

这个星期三也就是5月19日下午2点半开始我将为大家带来CLR开发课程系列之六。这一次我打算讲一些.NET比较本质的内容:Metadata和IL代码。欢迎希望对.NET的运作机理和工作方式能够有进一步深入了解的朋友收听。本次讲座的具体信息如下: 公共语言运行库(CLR)开发系列课程(6):.NET中间语言(IL)入门 (Level 200) 讲 师:张羿  课程简介:.NET本质上是一个执行中间语言(Intermediate Language) 代码的虚拟机,任何在.NET上运行的语言(如C#)都需要将本身翻译为IL代码,然后交给.NET执行。因此,理解IL代码对于理解.NET本身的工作方式、编写正确和高效的代码、查找和定位错误各种运行错误是非常有效的。本次讲座将介绍有关IL代码的基本知识,可以帮助大家理解大多数常见的IL代码。 推荐指数: 阅读全文>

发表于 @ 2009年05月19日 21:22:00|评论(loading...)|举报|收藏

原创 Visual Studio 2010 + .NET 4.0Beta1发布!

Visual Studio 2010和.NET 4.0的Beta1版本终于发布了!目前Beta1还只是对MSDN的订阅者开放,到美国时间20日星期三,也就是我们的21日星期四的时候,Visual Studio 2010 / .NET 4.0 Beta1将公开对外发布。这个版本是可以安装的Setup,而非上次的虚拟机镜像,因此对于大家的机器要求会放松一些。想要观看安装图片的朋友们可以点击这篇Blog:http://www.itsmywindows.com/visual-studio-2010-first-look-installation 这一次发布距离上次的CTP发布过了大概半年的时间,这半年的时间有数量众多的新特性被开发出来,并被加入到Beta1版本之中。在接下来的几篇Blog和Webcast(具体请参看中文MSDN的相关预告),我将主要介绍.NET 4.0 Beta1中的一些新特性,特别是我们上海CLR开发小组所负责开发的一些关于Interop的新功能,尽请期待!阅读全文>

发表于 @ 2009年05月19日 19:21:00|评论(loading...)|举报|收藏

2009年04月29日

原创 Visual Studio Team System 2010 Architecture系列文章

微软上海VS TeamArch小组的中文Blog上面最近开始了一个系列文章,主要翻译Cameron Skinner的一系列介绍Visual Studio Team System 2010 Architecture CTP的一些新功能的Blog,目前有下面两篇: VSTS 2010 Architecture 第一章:Modeling Project Visual Studio Team System 2010 Architecture- 前言 建议对VS 2010 Architecture CTP有兴趣的朋友可以关注一下。 VS TeamArch小组的Blog主页是:http://blogs.technet.com/teamarchchina/阅读全文>

发表于 @ 2009年04月29日 19:47:00|评论(loading...)|举报|收藏

2009年04月15日

原创 使用.NET/CLR的Stress Log功能寻找问题

不知道各位使用.NET开发的朋友是否有遇到过一些非常奇怪的问题而不知道如何下手呢?这个时侯CLR本身提供的StressLog功能就非常有用了。这个StressLog可以在很多时候把CLR所做的事情记录下来,比如,对于一个很简单的最后抛出异常的.NET程序Log大致如下: STRESS LOG: facilitiesToLog = 0x8000ffff levelToLog = 16 MaxLogSizePerThread = 0x20000 (131072) MaxTotalLogSize = 0x2000000 (33554432) CurrentTotalLogChunk = 6 ThreadsWithLogs = 3 Clock frequency = 0.014 GHz Start time 22:47:37 Last message time 22:47:44 阅读全文>

发表于 @ 2009年04月15日 21:28:00|评论(loading...)|举报|收藏

2009年03月30日

原创 .NET 4.0新功能:Corrupted State Exceptions

在.NET 4.0中引入了一个新功能:Corrupted State Exceptions。听上去名字很神秘,实际上这个功能主要是限制对Exception的错误用法:捕获AccessViolationException/SEHException等可能会造成程序状态错误而无法正确继续的种种异常,具体可以参看CLR程序经理Andrew Pardoe的这篇MSDN文章:http://msdn.microsoft.com/en-us/magazine/dd419661.aspx阅读全文>

发表于 @ 2009年03月30日 23:11:00|评论(loading...)|举报|收藏

原创 调试Bug的神兵利器:通过WinDbg条件断点收集Log

前段时间花了几天一直在用WinDbg调试一个比较棘手的Bug。这个Bug是C# Team那边发现的,他们的Testcase跑大概10分钟左右会出一个在CLR内部的ASSERT。比较难调试的主要原因在于ASSERT表明一个全局的数据结构出现了问题,本来不应该用完的数组却已经用完了(因为按照设计,这个数组是边使用边清理的,是不会用完的)。初步想到的有下面几种方案来调试: 1. 设置数据断点 2. 一步一步调试 3. 添加Log代码 设置数据断点的主要问题是不太好确定到底是因为什么原因导致的数据结构问题,而且因为是数组被用完,很难将是到底是哪一个数组元素的加入导致了数组被全部占用,因此无法通过设置数据断点的方法来调试。一步一步的调试显然也没法解决问题,因为这个Testcase本身要跑十分钟,可以想象单步调试运行十分钟的程序会花费多长时间。因此两个方案都被我否决。添加Log代码其实是可以的,只是需要修改代码,每次修改之后需要重新编译代码,然后需要在目标机器上安装,而且C#使用的CLR的Branch并非我们正在开发的Branch,需要重新下载源代码,相对比较麻烦。最后为了解决这个问题,我阅读全文>

发表于 @ 2009年03月30日 22:22:00|评论(loading...)|举报|收藏

2009年03月16日

原创 MSDN中文网络广播预告:.NET 4.0新特性系列课程(2):契约式设计 (Level 200)

这次我将为大家讲解如何使用.NET 4.0中的契约式设计(也可以在.NET 2.0+中使用,需要额外下载安装包),欢迎有兴趣的朋友收听。 地址为:http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032406872&Culture=zh-CN .NET 4.0中的新特性系列课程(2):契约式设计 (Level 200) 讲 师:张羿  课程简介:.NET 4.0中引入了契约式设计这一概念,允许程序员在函数体中按照固定的格式显式说明函数的入口,出口等地方所必须满足的条件。这一功能可以有效减少程序 Bug数量,让程序员更容易的理解现有代码,并提供静态检查、动态检查等功能。本次讲座将介绍契约式设计的概念,以及在.NET 4.0中的使用方法。 推荐指数: 阅读全文>

发表于 @ 2009年03月16日 22:31:00|评论(loading...)|举报|收藏

2009年02月16日

原创 预告:公共语言运行库(CLR)开发系列课程(4):COM Interop进阶

这次我主要讲RCW的原理,生命周期,引用计数,套间,System.__ComObject,事件调用原理等内容。CCW由于时间限制就不涉及了,毕竟大家还是以使用RCW为主。 感兴趣的朋友可以在下面注册: 公共语言运行库(CLR)开发系列课程(4):COM Interop进阶 (Level 300) 讲 师:张羿  课程简介:本次课程我们将介绍.NET调用COM组件上使用上的一些常见问题,特别是RCW创建、释放、和套间的交互等比较容易出错的地方。之后,我们将简介CCW的使用方法。 推荐指数: 阅读全文>

发表于 @ 2009年02月16日 21:50:00|评论(loading...)|举报|收藏

2009年01月07日

原创 System.Runtime.InteropServices.GetHRForException的陷阱

从字面上看,GetHRForException函数的作用很简单:得到Exception所对应的HRESULT的值。但是,GetHRForException还会做一件事情:设置当前线程的IErrorInfo使之指向该Exception(严格来说是获得Exception的CCW中的IErrorInfo接口指针)。如果对IErrorInfo不熟悉的朋友们可以把IErrorInfo看成COM版本的GetLastError或者errno。设置IErrorInfo会导致之后的代码如果使用GetErrorInfo查询IErrorInfo的值,会获得一个非0的结果,那么有些代码可能会认为程序出错而拒绝继续执行。更糟糕的是,如果之后的代码在做COM Interop或者PInvoke,CLR会检查IErrorInfo,如果IErrorInfo非0则认为该调用失败,并抛出异常或者返回错误值(视乎PreserveSigAttribute是否存在)。直接的结果是可能函数调用成功,但是因为IErrorInfo已经被设置而导致该调用最终失败。很有意思的是在.NET中有一段处理资源的代码正好有这个问题,结果间接导致了阅读全文>

发表于 @ 2009年01月07日 23:10:00|评论(loading...)|举报|收藏

原创 Vista上远程管理Hyper-V服务器

因为工作需要,我把自己的一台机器装上了Windows Server 2008并配置好了Hyper-V,用来Host我的一些虚拟机。但是我一般远程访问这台服务器,管理虚拟机起来不太方便,特别是在虚拟机上还没有安装好Integration Services更是如此。因此我经常用HyperV为Vista发布的一款MMC来远程管理我的虚拟机。这个MMC包含在Vista SP1 Managed Tools Update for the released version of Hyper-V里面,有需要的朋友可以在这里下载: http://support.microsoft.com/kb/952627 装好了之后在Administrative Tools中可以找到。 阅读全文>

发表于 @ 2009年01月07日 17:18:00|评论(loading...)|举报|收藏

2008年12月30日

原创 【预告】1月6日下午14:30 CLR开发系列课程(3):COM Interop基础 (Level 300)

1月6日下午14:30我将在MSDN中文网络广播中主讲.NET中COM和COM Interop的相关基础知识。有兴趣的朋友可以通过下面的链接登记并收听此次网络广播:  公共语言运行库(CLR)开发系列课程(3):COM Interop基础 (Level 300) 讲 师:张羿  课程简介:从本次课程开始,今后几次课程将围绕COM和COM Interop技术,展开对托管代码和非托管代码之间通过COM进行互操作的讨论。本次课程将从COM基础知识开始,简单介绍进行COM Interop的所需相关基础知识和概念,为以后的课程做好准备。 推荐指数: 阅读全文>

发表于 @ 2008年12月30日 21:30:00|评论(loading...)|举报|收藏

原创 .NET组件的注册表中RuntimeVersion的作用

使用过COM来访问.NET组件的朋友们应该都会注意到在对应注册表中有一个RuntimeVersion的键值: 这个RuntimeVersion的命名很容易让人误认为RuntimeVersion是用来指定该.NET组件所应该运行的CLR的版本号。实际上,这个键值的意思和字面上不是特别一致。如果我们考虑一个情况:首先,进程中先创建一个.NET类型的实例,RuntimeVersion标记为1.1,然后再创建一个.NET类型的实例,其RuntimeVersion标记为v2.0,那么到底会加载那些CLR版本呢?其实,在目前的.NET版本(Silverlight除外)中,因为无法支持在同一个进程中加载多个不同版本的CLR,因此无法支持真正的按照RuntimeVersion来加载不同的CLR版本。实际上,CLR总是加载最新的CLR版本(严格来说其实是mscoree.dll来加载)。因此,在之前的情况下,如果机器上面安装了1.1和2.0,实际上进程只加载了2.0的CLR,而没有加载1.1。如果机器上面只有1.1的话,第一个1.1的.NET会创建成功,并且启动1.1的CLR,第二个2.0的.NET阅读全文>

发表于 @ 2008年12月30日 21:17:00|评论(loading...)|举报|收藏

Csdn Blog version 3.1a
Copyright © 张羿