找回密码
 立即注册

QQ登录

只需一步,快速开始

Carl

版主

51

主题

217

帖子

978

积分

版主

Rank: 7Rank: 7Rank: 7

积分
978

活字格认证微信认证勋章

QQ
Carl
版主   /  发表于:2009-12-15 17:32  /   查看:7808  /  回复:0
Post by "rickey", 2007-03-22, 16:44
-----------------------------------------------------


在.Net Framework2.0中,增加了一个新的功能--Type Forwarding(不知道如何翻译)。
这项功能使得当你在重构代码时,将一个类型MyClass 从一个程序集A移动到程序集B后,无须重新编译引用了程序集A的应用程序MyApp成为可能.

假如, 原先的版本中,程序集A(A.DLL)包含有一个类型MyClass,其有一个方法MyMethod(),MyApp程序引用了程序集A中的MyClass。
要实现Type Forwarding的目的,需要完成以下几步工作:
  • 将MyClass的代码从程序集A移动到程序集B;
  • 编译程序集B,生成B.DLL;
  • 在程序集A中添加对程序集B的引用;
  • 在程序集A的AssemblyInfo.cs文件中,添加以下属性:[assembly:TypeForwardedToAttribute(typeof(MyClass))]
  • 编译程序集A,生成A.DLL;
  • 用新版本的程序集A(A.DLL)替换应用程序MyApp目录下的旧程序集A。
此时,你无须编译MyApp,运用MyApp程序,即能顺利运行;
如果没有第4步中,其它步骤相同的方式运行 MyApp程序,此程序将崩溃。
示例代码如附件:TypeForwardingTest.rar。
该文件共有三个文件夹:分别为TypeForwardingTest,TypeForwardingTest_V1和TypeForwardingTest_V2,其说明如下:

  • TypeForwardingTest文件夹
          该文件夹中有应用程序MyApp和程序集A的源代码。

  • TypeForwardingTest_V1文件夹
          该文件夹中为:程序集A的AssemblyInfo.cs文件中,没有
[assembly:TypeForwardedToAttribute(typeof(MyClass))]语句。
  • TypeForwardingTest_V2文件夹
         该文件夹中为:程序集A的AssemblyInfo.cs文件中,有
[assembly:TypeForwardedToAttribute(typeof(MyClass))]语句。 验证步骤:
  • 打开 TypeForwardingTest文件夹下的TypeForwardingTest.sln文件,并编译整个Solution;
  • 运行MyApp.exe文件,可输入如下信息:
          The return value is:Hello, world.
          Press Enter key to exit.
    3.    打开TypeForwardingTest_V1文件夹下的TypeForwardingTest_V1文件,并编译整个Solution;
    4,   将TypeForwardingTest_V1\A\bin\Debug目录下的A.dll和B.dll拷贝并覆盖TypeForwardingTest对应目录下的文件;
    5,重复第2步操作,发现MyApp.exe崩溃了;
    6, 打开TypeForwardingTest_V2文件夹下的TypeForwardingTest_V1文件,并编译整个Solution;
    7,   将TypeForwardingTest_V2\A\bin\Debug目录下的A.dll和B.dll拷贝并覆盖TypeForwardingTest对应目录下的文件;
    8,  重复第2步操作,发现MyApp.exe能够正常运转,并显示出2中的信息;

参考资料:http://msdn2.microsoft.com/en-us/library/ms404275.aspx
愿 Engine 归于沉寂,Timer 停止运动,Message Queue 不再流淌,Data Source 为我掌握

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部